Django很多很多朋友的关系

时间:2012-10-02 03:49:51

标签: django django-models

我正在尝试使用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未在朋友范围内定义。那么我该如何定义这种关系?

1 个答案:

答案 0 :(得分:4)

Django对于从模型到自身的多对多字段具有特殊语法。

the documentation开始,您可能希望在模型中使用类似的内容:

friends = models.ManyToManyField('self')

通常,Django没有将字段定义到超出范围的模型或尚未定义的模型的问题。解决方案是使用字符串命名模型,并在定义其他模型后解析该名称。例如,在定义两个彼此具有外键的模型时,这是必要的。但是,'self'是一种特殊情况,用于关系到您当前定义的模型。