2

私はDjangoを試していて、1つのエンティティをそれ自体に関連付ける多対多の関係を定義する方法を見つけようとしています. たとえば、「Myuser」というカスタム ユーザー オブジェクトがあるとします。Myuser にも Myuser 型の友達のリストを持たせたい:

class Myuser(models.Model):
    user = models.OneToOneField(User)
    username = models.CharField(max_length=200)
    last_login = DateTimeField(blank=True)
    is_active  = BooleanField(default=True)
    birthday = models.DateField()
    name = models.CharField(max_length=200)
    friends = models.ManyToManyField(Myuser)
    objects = MyuserManager()

    def __init__(self, *args, **kwargs):
        super(Myuser, self).__init__(*args, **kwargs)
        self.myuser = self


    def __unicode__(self):
        return self.name

    def is_authenticated(self):
        return self.user.is_authenticated()

Myuser が friends スコープで定義されていないため、これは機能しません。では、そのような関係をどのように定義すればよいでしょうか。

4

1 に答える 1

4

Django には、モデルからそれ自体への多対多フィールド用の特別な構文があります。

documentationから、モデルで次のようなものを使用したいと思うでしょう:

friends = models.ManyToManyField('self')

一般に、Django では、範囲外のモデルやまだ定義されていないモデルにフィールドを定義しても問題はありません。解決策は、文字列でモデルに名前を付けることです。その名前は、他のモデルが定義されると解決されます。これは、たとえば、相互に外部キーを持つ 2 つのモデルを定義する場合に必要です。'self'ただし、現在定義しているモデルに関係を戻す場合は特殊なケースです。

于 2012-10-02T04:06:03.300 に答える