32

私は次のコードを持っています:

class Game(models.Model):
    title = models.CharField(max_length=50)
    summery = models.CharField(max_length=500)
    key = models.IntegerField()
    pin = models.CharField(max_length=12)
    complete = models.BooleanField()
    invite_sent = models.DateTimeField()
    on = models.ForeignKey(Member, blank = True) #<----


class Member(models.Model):
    email = models.CharField(max_length=100)
    color = models.CharField(max_length=11)
    game = models.ForeignKey(Game) #<----

「オン」の外部キーは、メンバーの1つ(その順番はメンバー)にリンクします。ゲームのすべてのメンバーは、「ゲーム」外部キーを現在のゲームに設定しています。問題は、Djangoが宣言される前にクラスを参照させないことです。また、クラスを同時に宣言することはできないため、...

編集:物事を片付けるために、ここに例があります。1つのゲームをプレイするメンバーが5人いる場合、5人全員がゲームへの外部キーを持ちます。一方、ゲームには、その順番があった特定のメンバーに対する1つの外部キーがあります。

4

2 に答える 2

55

ForeignKeyフィールドのDjangoドキュメントには次のように記載されています。

まだ定義されていないモデルにリレーションシップを作成する必要がある場合は、モデルオブジェクト自体ではなく、モデルの名前を使用できます。

したがって、あなたの場合、それは次のようになります。

class Game(models.Model):
    # Other fields...
    on = models.ForeignKey('Member', blank = True)

class Member(models.Model):
    # Other fields...
    game = models.ForeignKey(Game)
于 2012-12-20T20:18:16.100 に答える
10

2つのモデルが外部キーで相互に参照する必要はありません。次の行を削除します。

on = models.ForeignKey(Member, blank = True) #<----

論理的には、あなたMemberのゲームは引き続き異なるゲームに関連付けられますGame(これは、メンバーが一度に1つのゲームに属することができるのに対し、ゲームは複数のメンバーを持つことができるため、より理にかなっています)。

逆の関係を使用して、特定のゲームに参加しているメンバーを特定できます。

于 2012-12-20T18:53:50.130 に答える