2017-09-20 7 views
0

Ich habe den folgenden Code.Django Filterung mit Kwargs

def alpha(**kwargs): 
    q_obj_list = [Q(str(i), kwargs.get(i)) for i in kwargs.keys()] 
    reduce(operator.and_, q_obj_list) 
    return q_obj_list 

q = Elements.objects.all() 
q = q.filter(alpha(id=1, is_active=False)) 

Für diesen Code, den ich eine Fehlermeldung, Typeerror empfange: boolsche Objekt hat kein Attribut ‚getitem‘. Ich wollte den folgenden Code durch diesen ersetzen.

q = Elements.objects.all() 
id = kwargs.get("id") 
active = kwargs.get("is_active") 
q.filter(id=id,is_active=active) 

Wie kann ich einen solchen Fehler beheben?

+0

Bitte ändern 'id = kwargs.get ("id) '' von id = kwargs.get (" id") 'Da es eine sehr kleine Veränderung ist, kann ich nicht ändern. Ihre Frage Was ist 'Q'? – GLR

+1

Warum nicht einfache Abfrage?' q = Elements.objects.filter (id = kwargs.get ("id"), aktiv = kwargs.get ("is_active")) ' –

+0

@RomanMindlin Ich frage nach einem besseren Weg in Fällen, wenn die Anzahl der Felder groß und Argumente optional sind. –

Antwort

1

sollten Sie verwenden: q = Elements.objects.filter(**kwargs)