2011-03-03 7 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(あなたの最初のForeignKeyのためのDjangoで作成されたオートマジックプロパティ、Message.user

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

あなたはしなければなりませんForeignKey/m2mフィールドのいずれかに関連する名前引数を指定して、逆の関係の一意のアクセサーを定義します。

たとえば、のモデルの逆の関係は、UserProfile.message_setです。 ForeignKeyが2つある場合、同じUserProfile.message_setメソッドを使用して2つの異なる逆リレーションシップを作成しようとしています。

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

/*ユーザーですUserProfile */iは "DatabaseError:no such table"を取得します。 – user642958

+0

テーブルを作成する:)あなたが 'syncdb'をしようとしていたら、djangoは' related_name'の衝突について不平を言うでしょう。 –

+0

"テーブルを作成する" - あなたが思うかもしれないよりも難しい;)私が言ったように、私はdjangoの新人です:( – user642958

0

問題がvoting_usersmessage_set両方が同じ属性名userを持っているということです。 related_nameでは、名前の競合を避けるために使用できる属性のいずれかのエイリアスを定義できます。

(編集:間違ったリンク)

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

は、この質問は、ここに記載されている別の質問に非常に似ている:私はmessage.voting_users.add(ユーザー)を使用する場合 Django: Why do some model fields clash with each other?

関連する問題