2017-02-18 112 views
0

我有一個觀點:ORM過濾器一直沒有結果

def PeopleView(request): 
    ... 
    parameters = copy.deepcopy(request.GET) 
    for parameter in request.GET: 
     if not request.GET.get(parameter): 
      del parameters[parameter] 
    people = Person.objects.filter(**parameters) 
    search_form = PersonSearchForm() 
    return render(request, 'persons/people.html', { 
     'people': people, 
     'search_form': search_form, 
     ... 
    }) 

PersonSearchForm:

class PersonSearchForm(forms.Form): 
    first_name = forms.CharField(required=False) 
    last_name = forms.CharField(required=False) 
    second_name = forms.CharField(required=False) 
    country = forms.CharField(required=False) 
    city = forms.CharField(required=False) 
    gender = forms.CharField(widget=forms.Select, required=False) 
    birthday = forms.DateField(required=False) 
    school = forms.CharField(required=False) 
    university = forms.CharField(required=False) 
    profession = forms.CharField(required=False) 

人模型具有相同的名稱從PersonSearchForm領域。這個表格被用戶作爲GET請求發送。的參數可變

GET請求和打印: enter image description here

然而總是濾波器具有沒有結果。怎麼了?

+0

Dunno。什麼是參數?模型是什麼樣的?你有關於要求值的數據嗎? –

+0

@DanielRoseman我添加了關於PersonSearchForm的信息。人員模型具有相同類型和名稱的字段。 –

+1

你能在視圖中打印'parameters'並顯示結果嗎? –

回答

1

SOLUTION

我解決了這個問題。解決方案是將querydict參數轉換爲dict對象。它看起來像:

... 
filter_parameters = {} 
for parameter in parameters: 
    filter_parameters[parameter] = parameters[parameter] 
people = Person.objects.filter(**filter_parameters) 
... 

它的工作原理。