0

在 Django 中,我有三个模型:

class Player(models.Model)
    team = models.ForeignKey('Team')

class Team(models.Model)
    name = models.CharField(max_length=20)
    coach = models.ForeignKey('Coach')

class Coach(models.Model)
    name = models.CharField(max_length=255)

我使用 South 更改模型以将 Coach 外键添加到 Player:

class Player(models.Model)
    team = models.ForeignKey('Team')
    coach = models.ForeignKey('Coach')

我在数据迁移中迁移数据:

players = orm.Player.objects.all()
for player in players:
    player.coach = player.team.coach
    player.save()

当我在数据库中检查数据时,数据迁移得很好(SQLite 版本 3.7.2):

sqlite> SELECT team_id, coach_id from Player WHERE id = 1;
2|4

但是当我尝试通过 Django ORM 访问数据时:

>> player = Player.objects.get(pk=1)
>> player.coach
---------------------------------------------------------------------------
DoesNotExist                              Traceback (most recent call last)

/home/pat/Development/baseball/<ipython console> in <module>()
/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/db/models/fields/related.pyc in __get__(self, instance, instance_type)
    299                 if self.field.null:
    300                     return None
--> 301                 raise self.field.rel.to.DoesNotExist
    302             other_field = self.field.rel.get_related_field()
    303             if other_field.rel:

DoesNotExist:

几点注意事项:

这不是实际的代码,但它基本上是它的精确匹配。不要要求查看实际代码,因为我不能分享它——它是机密的,不属于我。但是,我可以使用此类似示例提供更多详细信息。

在创建迁移之前,我不知道我需要 Player 模型上的 coach 字段 - 所以我手动将它添加到现有迁移中。运行迁移时,我没有收到任何错误,而且,就像我说的,迁移似乎在数据库级别运行良好。

4

0 回答 0