Django:related_name属性(DatabaseError)

时间:2011-03-03 12:32:10

标签: django

我的模特遇到了这个问题。

class Message(models.Model):
    user = models.ForeignKey(UserProfile)
    text = models.TextField(max_length=160)
    voting_users = models.ManyToManyField(UserProfile)

    def __unicode__(self):
        return self.text

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)

    def __unicode__(self):
        return self.user.username

当我尝试调用message.voting_users:

时出现此错误
message: Accessor for m2m field 'voting_users' clashes with related field
'UserProfile.message_set'. Add a related_name argument to the definition for
'voting_users'.

我实际上是django的新手,我不明白我应该如何使用related_name属性。

2 个答案:

答案 0 :(得分:1)

正如它所说,voting_users需要一个related_name参数,因为它与已经定义的相关字段message_set(由django为您的第一个ForeignKey创建的自动属性,{{{ 1}})

http://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.related_name

您必须为任一ForeignKey / m2m字段提供相关名称参数,以便为反向关系定义唯一的访问者。

例如,Message.userMessage模型的反向关系为UserProfile。如果您有两个UserProfile.message_set,那么您尝试使用相同的ForeignKey方法创建两个不同的反向关系。

UserProfile.message_set

答案 1 :(得分:0)

问题是voting_usersmessage_set都具有相同的属性名称userrelated_name允许您为可用于避免名称冲突的其中一个属性定义别名。

(编辑:链接错误)

http://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.related_name

此问题与此处列出的其他问题非常相似: Django: Why do some model fields clash with each other?