在django中使用选择字段值过滤对象

时间:2017-01-06 12:05:39

标签: django

我的模型帐户中有以下选择字段。

GENDER_CHOICES = (
    (1, 'Male'),
    (2, 'Female'),
    (3, 'Other'),
)

我想根据性别搜索用户。如何搜索/过滤"男性"或者"女性"?

2 个答案:

答案 0 :(得分:1)

据我所知,如果有以下选择:

GENDER_CHOICES = ( 
        (1, 'Male'), 
        (2, 'Female'), 
        (3, 'Other'), 
        ) 

然后你可以使用:

def your_view(request, gender):

    if gender == "male" or gender = "Male" :
        accounts = Account.objects.filter(gender=1)
    elif gender == "female" or gender = "Female":
        accounts = Account.objects.filter(gender=2)
    else :
        accounts = Account.objects.filter(gender=3)

正如你在评论中提到的, 如果你有20个选择:

def your_view(request, gender):

    id_list = [0,1,2,3 ....... 19]
    choice_list = ["choice 0","choice 1","choice 2","choice 3",....."choice 19"]

    for i in range(20):

        if gender == choice_list[i]:
            accounts = Account.objects.filter(gender=i)

答案 1 :(得分:0)

我将假设您的模型名为Account并且其中包含gender字段。

由于您使用数字作为选择,您可以这样做:

male_accounts = Account.objects.filter(gender=1)

您可以使用相同的方法完成其余的工作。

修改

在评论中,您希望使用

访问它们
male_accounts = Account.objects.filter(gender='male')

您应该将GENDER_CHOICES更改为:

GENDER_CHOICES = (
    ('male', 'Male'),
    ('female', 'Female'),
    ('other', 'Other'),
)
引用Django的官方文档:

  

每个元组中的第一个元素是要在模型上设置的实际值,第二个元素是人类可读的名称。   https://docs.djangoproject.com/en/1.10/ref/models/fields/#choices