2013-06-28 26 views
5

我在models.py文件兩類:如何刪除Django中自動生成的ManyToMany表中的冗餘ID字段?

class Person: 
    person_name = models.CharField(max_length = 50) 

class Course: 
    course_name = models.CharField(max_length = 50) 
    course_person = models.ManyToManyField(Person) 

在我的修改例如,一個人是需要很多的課程和一門課程採取了很多人,因此多對多。

當我讓Django自動生成我的表時,我得到一個額外的ID字段。 我希望自動生成的多個表只能由兩個組合鍵person_idcourse_id組成。 注意:它們都是自動生成的自動遞增字段。

我也嘗試定義我的ManyToMany類,並嘗試使用關鍵字through=鏈接字段,但這並沒有幫助。

我問過Google,但沒有太多幫助。許多你們當中的一些天才可以提供一些提示:)

回答

6

的Django目前does not support composite primary key by default

你可以做的反而是保持自動生成的id作爲(代理)主鍵,然後定義在throughunique_together關係。

class Meta: 
    unique_together = (course, person) 

通過這種方式,可以保證在通過表中是唯一的條目,當你引用id它引用的唯一(course, person)這就是我們想要反正是等價的。

如果需要,有一些third party apps可以實現此功能。但是,除非絕對必要(如遺留系統支持),否則我會保持簡單並實施unique_together

+2

感謝您的意見。那麼,這是Django不能做到這一點的限制。 Django試圖讓生活變得輕鬆。我曾經從頭開始設計數據庫以用於我的應用程序,我並不高興Django試圖自己做所有事情。至少,我對_some_的東西沒有太多的控制,比如不創建冗餘ID字段。我使用MySQL工作臺來直觀地描述我的數據庫,而這個額外的ID字段看起來不太好。無論如何,因爲它不影響應用程序的邏輯,我可以忍受那:) – shailenTJ