我的模特遇到了这个问题。
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属性。
答案 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.user
上Message
模型的反向关系为UserProfile
。如果您有两个UserProfile.message_set
,那么您尝试使用相同的ForeignKey
方法创建两个不同的反向关系。
UserProfile.message_set
答案 1 :(得分:0)
问题是voting_users
和message_set
都具有相同的属性名称user
。 related_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?