2

我正在试验 Django,并试图弄清楚如何定义一个实体与其自身相关的多对多关系。例如,假设我有一个名为“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 对从模型到自身的多对多字段有特殊的语法。

文档中,您可能希望在模型中使用类似这样的内容:

friends = models.ManyToManyField('self')

一般来说,Django 在为超出范围或尚未定义的模型定义字段时没有问题。解决方案是用字符串命名模型,一旦定义了另一个模型,该名称就会被解析。例如,在定义两个相互具有外键的模型时,这是必要的。'self'但是,对于返回到您当前定义的模型的关系来说,这是一种特殊情况。

于 2012-10-02T04:06:03.300 回答