我一直在想出一個解決方案,以實現我想要實現的目標。作爲自學django的一部分,我試圖爲我的武術俱樂部創建一個俱樂部會員網站。作爲其中一個應用程序的一部分,我提出了兩類模型;會員和學校。Django - 與ForeignKeys相互引用的兩個類的模型結構建議
這個想法是讓會員們用ForeignKey來提及他們屬於哪所學校,並讓學校參考會員來確定教師。教師只是一個普通的成員,用BooleanField標識他們是否是教師。
我只是不斷提出問題後,我有點解決一個又一個,但我不知道我在做什麼是最有效的方式做到這一點。
這裏是會員模型的那部分看起來像目前:
instructor = models.BooleanField('Instructor?', default=False)
school = models.ForeignKey('School')
,這裏是學校類的樣子:
class School(models.Model):
SCHOOL_CHOICES = (
('RED', 'Redruth - Centre of Excellence'),
('FAL', 'Falmouth - FXU'),
('MEV', 'Mevagissey'),
)
name = models.CharField(max_length=3, choices=SCHOOL_CHOICES, default='RED')
instructors = models.ForeignKey('Student', related_name='instructors', blank=True, null=True)
我不得不把related_name添加到教官ForeignKey的,因爲沒有它會拋出錯誤。我也嘗試在Members模型中爲學校ForeignKey添加一個to_field,因爲目前它只顯示了三個「學校對象」,但這似乎沒有改變它(編輯:修正了unicode定義)。
我是這樣做的(兩個類與ForeignKeys互相引用)是做這件事的最佳方式,還是應該做其他事情?
對不起,如此模糊的:/
看,我知道會有一些更簡單,更優雅,我俯視,謝謝。 – TSDAdam 2013-03-06 15:41:06
@TSDAdam在一個有點相關的說明中,您可能完全擺脫了'School'模型 - 如果name是模型中唯一的字段,並且只有3個靜態選項,則不需要將其提交給數據庫。只要將'Member'上的'school'字段設置爲帶有'choices'的CharField'(就像'School.name'一樣)。如果你的模型比這更復雜,那麼除非你預計有幾個'School'實例具有你需要調整的相同名稱,否則你可能仍然會刪除這些選擇。 – 2013-03-06 15:47:21
令人討厭的是,這正是我以前的樣子,學校只是會員模式中的一個選擇。我甚至沒有考慮過使用過濾器來顯示和分類教師和學校,因此我試圖給它自己的模型並將它們聯繫在一起。 – TSDAdam 2013-03-06 20:32:59