2

私は Django 1.5 を使用していますが、かなり基本的なものに苦労しています。

私は次の Persons モデルを持っています:

class Person(models.Model):
    contact_person = models.ManyToManyField(ContactPerson)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
...

目標は、人物のパートナーをモデルに追加することです。パートナーや人が他の人よりも優れていることを望んでいません。それらは等しくなければなりません。つまり、人を検索すると、パートナーも表示されるはずです (存在する場合)。女性側または男性側のいずれかで、パートナーを 1 回追加できる必要があります (2 回リンクしたくありません)。

OneToOneFields のドキュメントを検索しましたが、再帰的な OneToOnes はサポートされていないようです。つまり、試してみると NameError ("name 'Person' is not defined") が発生します。

partner = models.OneToOneField(Person, blank=true, null=true)

誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

4

これを試して:

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    ...
    partner = models.OneToOneField('self', null=True, blank=True)

    def save(self, checkPartner = True, *args, **kwargs):
        super(Person, self).save()
        if self.partner and checkPartner:
            self.partner.partner = self
            self.partner.save(checkPartner = False)
  • パートナー フィールドで Null tr​​ue を有効にする必要があります。最初に保存される人物にはパートナーがいないためです。
  • save() が無限ループに陥らないように、checkPartner パラメータが追加されました。
于 2013-08-16T12:24:22.937 に答える