2009-10-02 33 views
1

以下是兩個角色:培訓師和培訓生。培訓師可能有多名學員。雖然每個學員可能只有一名教練或沒有教練。如何用django設計我的案例模型?

這裏是我的模型:

class TrainerShip(models.Model): 
    trainer = models.ForeignKey('Trainer') 
    trainee = models.ForeignKey(User) 
    request_date = models.DateTimeField(auto_now_add=True) 
    accept_date = models.DateTimeField(auto_now_add=True) 
    expiration_date = models.DateTimeField(auto_now_add=True) 

class Trainer(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    trainee = models.ManyToManyField(User, through=TrainerShip) 
    introduction = models.TextField(max_length=500) 
    certification = models.TextField(max_length=300) 
    specialties = models.TextField(max_length=300) 
    contact = models.TextField(max_length=100) 
    active = models.BooleanField(default=False) 

我正在試圖創建數據庫時,以下錯誤:

[email protected]:~/django/sutifang$ ./manage.py syncdb Error: One or more models did not validate: registration.trainer: Accessor for field 'user' clashes with related m2m field 'User.trainer_set'. Add a related_name argument to the definition for 'user'. registration.trainer: Accessor for m2m field 'trainee' clashes with related field 'User.trainer_set'. Add a related_name argument to the definition for 'trainee'.

任何人有這個想法來解決這個問題?有沒有更好的方法來建模這種關係?

回答

3

問題是外鍵建立了雙向關係。這意味着您可以執行User.trainer_set以獲取用戶下的所有培訓師模型,這意味着您有循環引用回到用戶數據庫(讓培訓師模型獲取其所有字段,其中一個字段是原始用戶。模型

因此,要解決這個問題,添加相關名稱參數外鍵停止這種循環依賴:

user = models.ForeignKey(User, unique=True, related_name='traineruser') 

你可以用一些替代traineruser不已經有一個數據庫中的表

+0

非常感謝。這是我第一次在這裏提出問題。 再次感謝! – user182863 2009-10-02 02:58:09