2017-01-06 93 views
0

我已经在我的模型账号以下选择现场字段值。筛选与选择的对象在Django

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

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

+0

你能分享你在使用这个模型吗? – Jimmar

回答

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

+0

但我想这样做的以下方式:male_accounts = Account.objects.filter(性别=“男”) –

+0

@TariqueSiddique检查我的编辑答案 – Jimmar

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

这是一个好的做法是使用较低的()上的性别,以避免如果仔细检查? 'lower_gender = gender.lower()' 'if lower_gender ==“male:[...]' – Wilfried

+0

@Wilfried这是一个很好的方法 –

+0

如果选择字段包含20个元组数据,那么我必须使用if语句那么我该怎么做呢?是否有任何一种广义的方法来做到这一点? –