2011-11-06 43 views
0

主催者と多数の参加者を含む会議モデルを定義する必要があります。すべての参加者は、認証モジュールの標準ユーザーから派生しています。 syncdbの実行を実行しているときにDjangoのOneToManyとOneToOneの間の競合

from django.db import models 
from django.contrib.auth.models import User 

class Meeting(models.Model): 
    organizer=models.ForeignKey(User) 
    participants=models.ManyToManyField(User) 

はしかし、私は次のエラー

を得た

Error: One or more models did not validate: hub.meeting: Accessor for field 'organizer' clashes with related m2m field 'User.meeting_set'. Add a related_name argument to the definition for 'organizer'. hub.meeting: Accessor for m2m field 'participants' clashes with related field 'User.meeting_set'. Add a related_name argument to the definition for 'participants'.

これを解決するために

誰も私を助けることができますか?

+0

上記の回答のように、ドキュメントherehere

コードこの質問のタイトルは問題とは何の関係もありません見ます –

答えて

3
class Meeting(models.Model): 
    organizer=models.ForeignKey(User, related_name="meetings_orginizer") 
    participants=models.ManyToManyField(User, related_name="meetings_participants") 

あなたはユーザーオブジェクトを持っていて、ユーザがの参加者であるか会議の主催者である会議のいずれかを見つけるために、逆方向の関係をフォローしたい場合は、あなたが、具体的に必要それらを区別するためにモデルの 'related_name'フィールドに名前を付けます。今、あなたはそうのような後方の関係を追跡することができます:下位関係に関係しています

me = User.objects.get(id=0) 
# Meetings I'm organising 
m1 = me.meetings_orginizer.all() 
# Meetings I'm participating in 
m2 = me.meetings_participants.all() 
1

(エラーメッセージで述べたように)問題。外部キー(またはmany2many)を定義すると、djangoは逆関係User.meeting_setを設定します。ただし、2つのリレーションがあるため、リバースリレーションが衝突し、関連する名前を手動で指定する必要があります。私はそれを変更することをお勧め:

関連する問題