2017-01-06 159 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語句那麼我該怎麼做呢?是否有任何一種廣義的方法來做到這一點? –