2012-06-20 4 views
0

두 개의 필터를 사용하여 모델 개체를 필터링하고 싶습니다. 그래서 하나의 필터 일 수도 있고 둘 다 또는 전혀 없을 수도 있습니다. 장고 모델 다중 필터

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

, 내 나쁜, 내가 생각 "이 더 화제가 데이터베이스에없는 경우 다음이가 DB에서 큐레이터 경우에도 아무 것도 반환하지 않습니다." 하지만 이제는 필자가 필자의 필자가 필자가 작성한 항목이나 기사의 큐레이터를 클릭하여 필터를 만들었다는 사실을 깨달았습니다.) – Feanor

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