ManytoManyField替代静态/硬编码数据的替代方案?

时间:2011-12-17 16:15:06

标签: python django

我正在构建一个Django应用程序,我需要为所有用户代表性别(​​男/女)。单个用户可以选择他们对男性,女性或两者感兴趣。然后,该数据将用于与其他用户交叉引用以查找相似之处。用于性别的ManytoManyField显然可以工作,但由于性别是一个相当静态的领域,只有两个选项,有没有更好的方法来实现它?是否存在某种具有多选功能的字段,不需要数据库无意中听到m2m字段?

2 个答案:

答案 0 :(得分:2)

绝对不喜欢M2M - 这将变得昂贵,并且随着时间的推移很难用大量的双下划线表示法查询。对于静态内容,您特别需要choices

多年来我学到的一个更有用的编码实践是James Bennets博客的一个想法是他使用选择的方式: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)

答案 1 :(得分:0)

您可以存储字符串或int,并使用choices

限制可能的值