Feanor
Feanor

Reputation: 3690

Django model multiply filter

I want to filter my model object using two filters. So, it can be only one filter or both or none. My solution is to use a lot of 'if':

if _topic or _curator:
    if _topic and _curator:
        queryset = Article.objects.filter(topic=_topic,curator=_curator)
    elif _curator:
        queryset = Article.objects.filter(curator=_curator)
    else # so topic is the last choice
        queryset = Article.objects.filter(topic=_topic)
else
    queryset = Article.objects.all()

Can someone suggest an easier way to filter?

Upvotes: 0

Views: 223

Answers (2)

DrTyrsa
DrTyrsa

Reputation: 31951

kwargs = {}
if _topic:
    kwargs[topic] = _topic
if _curator:
    kwargs[curator] = _curator
queryset = Article.objects.filter(**kwargs)

Upvotes: 1

Daniel Roseman
Daniel Roseman

Reputation: 599610

Queryset filters are cumulative.

queryset = Article.objects.all()
if _topic:
    queryset = queryset.filter(topic=_topic)
if _curator:
    queryset = queryset.filter(curator=_curator)

Upvotes: 1

Related Questions