2012-09-18 60 views
0

您好我有下面的代碼做工精細:如何篩選在Django設置查詢結果列表

if getattr(hotel_main, "X", 1): 
     hotels1 = hotels.filter(Q(X=True)) 
     for hotel in hotels1: 
      if models.CalendarDay.objects.filter(hotel=hotel, date=date).count() == 0: 
       similar_venues.append(hotel) 

我上面的代碼重用一遍又一遍,以檢查不同的條件像Q(Y =真),Q( Y = True),Q(Z = True)

如果我可以根據條件過濾列表,我可以擺脫重複代碼...我想要這樣的:similar_venues.filter(Q(X =真))任何幫助,請...

+0

是什麼simllar場館在這裏?它是查詢集還是列表 – karthikr

+1

查看Django謂詞。可能有用。 https://github.com/ptone/django-predicate – miki725

+0

如果我沒有誤解它,你正在尋找類似'hotels1 = hotels.filter(Q(X = True)| Q(Y = True)| Q( Z = True)|)'這意味着任何(X,Y,Z)值可以是'真' – FallenAngel

回答

0

如果我正確地理解你問:

filter_on_x = [obj for obj in similar_venues if obj.X] 
filter_on_y = [obj for obj in similar_venues if obj.Y] 

等所有的X,Y,Z

0

您可以在列表中寫條件:

conditions = [ Q(Y=True),Q(Y=True),Q(Z=True) ] 
if getattr(hotel_main, "X", 1): 
    q_date = Q(calendarday__date = date) 
    for q in conditions: 
     for hotel in hotels.filter(q_date & q).distinct(): 
      similar_venues.append(hotel) 
+0

@ user1529342,現在我明白你的問題了。 – danihp