2017-02-18 5 views
0

Ich habe einen Blick:ORM-Filter hat keine Ergebnisse

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) 

Person Modell verfügt über Felder aus PersonSearchForm mit dem gleichen Namen. Und dieses Formular wird vom Benutzer als GET-Anfrage gesendet.

GET-Anforderung und Druck von Parametern variabel: enter image description here

jedoch Filter hat immer keine Ergebnisse. Was ist los mit dir?

+0

Weiß nicht. Was sind die Parameter? Wie sieht das Modell aus? Haben Sie Daten zu den gewünschten Werten? –

+0

@DanielRoseman Ich habe die Info über PersonSearchForm hinzugefügt. Personenmodell hat die Felder mit dem gleichen Typ und Namen. –

+1

Können Sie "Parameter" in der Ansicht drucken und das Ergebnis anzeigen? –

Antwort

1

SOLUTION

löste ich das Problem. Die Lösung ist eine Transformation von Querydict-Parametern in dict-Objekte. Es sieht so aus:

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

Und es funktioniert.