2013-03-06 59 views
0

我一直在想出一個解決方案,以實現我想要實現的目標。作爲自學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互相引用)是做這件事的最佳方式,還是應該做其他事情?

對不起,如此模糊的:/

回答

1

既然你標上Member模型教官,你並不需要在School模型中的其他關係來識別它們。相反,如果你想得到的教練,對於一個特定的學校,你可以做:

instructors = Members.objects.filter(instructor=True, school=my_school) 
+0

看,我知道會有一些更簡單,更優雅,我俯視,謝謝。 – TSDAdam 2013-03-06 15:41:06

+0

@TSDAdam在一個有點相關的說明中,您可能完全擺脫了'School'模型 - 如果name是模型中唯一的字段,並且只有3個靜態選項,則不需要將其提交給數據庫。只要將'Member'上的'school'字段設置爲帶有'choices'的CharField'(就像'School.name'一樣)。如果你的模型比這更復雜,那麼除非你預計有幾個'School'實例具有你需要調整的相同名稱,否則你可能仍然會刪除這些選擇。 – 2013-03-06 15:47:21

+0

令人討厭的是,這正是我以前的樣子,學校只是會員模式中的一個選擇。我甚至沒有考慮過使用過濾器來顯示和分類教師和學校,因此我試圖給它自己的模型並將它們聯繫在一起。 – TSDAdam 2013-03-06 20:32:59