2011-03-03 60 views
3

我有我的模型的這個問題。Django:related_name屬性(DatabaseError)

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屬性。

回答

1

,因爲它說,voting_users,需要related_name說法,因爲它與已定義的相關領域的不合,message_set

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

你必須(Django在你的第一個ForeignKeyMessage.user創建AUTOMAGIC屬性)爲您的ForeignKey/m2m字段提供相關的名稱參數以爲反向關係定義唯一的訪問者。

例如,Message型號的逆向關係爲UserProfile.message_set。如果您有兩個ForeignKey,則您嘗試使用相同的UserProfile.message_set方法創建兩個不同的反向關係。

user = models.ForeignKey(UserProfile, related_name="message_user") 

... 
# would create a UserProfile.message_user manager. 
userprofile.message_user.all() # would pull all message the user has created. 
userprofile.message_set.all() # would pull all Messages that the user has voted on. 
+0

當我使用message.voting_users.add(用戶)/ *用戶一個UserProfile * /我得到「DatabaseError:沒有這樣的表」。 – user642958 2011-03-03 13:04:00

+0

創建表:)如果你一直試圖'syncdb',Django會抱怨'related_name'衝突.. – 2011-03-03 13:06:08

+0

「創建表」 - 這對我來說比你想象的更難;)就像我說的,我是django的新手:( – user642958 2011-03-03 13:33:15