0

Django には 3 つのモデルがあります。

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 モデルにコーチ フィールドが必要であることを知りませんでした。そのため、既存の移行に手動で追加しました。移行を実行してもエラーは発生しません。前述したように、移行はデータベース レベルで正常に機能しているようです。

4

0 に答える 0