2011-11-06 85 views
0

我需要定義一個包含組織者和參與者數量的會議模型。所有參與者都來自標準的用戶身份驗證模塊。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) 

但是,在運行時執行syncdb時,我得到了以下錯誤

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

這個問題的題目並沒有什麼關係的問題:我建議改變它 –

回答

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。但是,由於您有兩個關係,反向關係衝突,您必須手動指定相關名稱。看到文檔herehere

代碼在回答上述