Reputation: 3690
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
Reputation: 31951
kwargs = {}
if _topic:
kwargs[topic] = _topic
if _curator:
kwargs[curator] = _curator
queryset = Article.objects.filter(**kwargs)
Upvotes: 1
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