2011-12-17 65 views
0

我正在構建一個Django應用程序,我需要爲所有用戶表示性別(男性/女性)。單個用戶可以選擇他們對男性,女性或兩者都感興趣。這些數據將被用來與其他用戶進行交叉參考以發現相似之處。一個ManytoManyField性別顯然會起作用,但由於性別是一個相當靜態的領域,只會有兩個選擇,是否有更好的方法來實現呢?是否有某種不需要數據庫偷聽到m2m字段的多選字段?用於靜態/硬編碼數據的ManytoManyField的替代方法?

+0

作爲答案說,「選擇」是你想要的。但真正的「選擇」只能工作而不是'ForeignKey'。如果這個人既是男性又是女性? – Jayen 2017-03-26 07:31:18

回答

2

限制可能值絕對迴避的M2M了 - 這將讓價格昂貴,只是普通很難查詢隨着時間的推移噸雙下劃線符號的。對於靜態的東西,你特別想要choices

一個比較實用的編碼習慣我多年的經驗是從詹姆斯班納特博客的想法是,他使用的選擇方式:http://www.b-list.org/weblog/2007/nov/02/handle-choices-right-way/

基本上,我們可以讓你做到這一點:

class MyObject(models.Model): 
    MALE = 0 
    FEMALE = 1 
    ROBOT = 2 
    MY_CHOICES = [ 
     (MALE, 'Male'), 
     (FEMALE, 'Female'), 
     (ROBOT, 'Robot'), 
    ] 
    gender = models.IntegerField(choices=MY_CHOICES) 


MyObject.objects.filter(gender=MyObject.ROBOT) 
0

您可以存儲字符串或一個int,並使用choices

+1

或者,您可以使用兩個布爾字段:對男性和女性感興趣。您可能會對它進行一些簡單的調整,使其更加便於用戶使用,但我認爲從數據庫的角度來看更有意義。 – 2011-12-17 16:23:42