2011-12-17 45 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

相关问题