2012-06-20 5 views
0

Я хочу, чтобы фильтр моего объекта модели использовал два фильтра. Таким образом, это может быть только один фильтр или оба или ни один. Мое решение использовать много «если»:Фильтр многократного заполнения Django

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() 

Может кто-то предложить более простой способ фильтрации?

ответ

1

Фильтры Queryset являются кумулятивными.

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

хорошо, мой плохой, я подумал: «если это не тема в базе данных, то это не будет возвращать ничего, даже если он был куратором в БД». Но теперь я понял, что мой фильтр сделан мной, нажав на тему или на кураторе в статье), поэтому он не может быть ничем в наборе результатов) – Feanor

1
kwargs = {} 
if _topic: 
    kwargs[topic] = _topic 
if _curator: 
    kwargs[curator] = _curator 
queryset = Article.objects.filter(**kwargs) 
Смежные вопросы