2013-10-15 20 views
-1
if(filter[0][0]): 
    films_material_PP = GlassFilm.objects.filter(f_material = 'PP') 
else: 
    films_material_PP = GlassFilm.objects.none() 

if(filter[0][1]): 
    films_material_PVC = GlassFilm.objects.filter(f_material = 'PVC') 
else: 
    films_material_PVC = GlassFilm.objects.none() 


if(filter[1][0]): 
    films_color_Grey = GlassFilm.objects.filter(f_color = 'Grey') 
else: 
    films_color_Grey = GlassFilm.objects.none() 

if(filer[1][1]): 
    films_color_Yellow = GlassFilm.objects.filter(f_color = 'Yellow') 
else: 
    films_color_Yellow = GlassFilm.objects.none() 

films_material.union(films_material_PP,films_material_PVC) 
films_color.union(films_color_Grey,films_color_Yellow) 
films_total.intersect(films_material,films_color) 

我們如何在Django中實現最後三條語句?我見過這樣的其他問題,請注意,我不是在尋找Django中的數組和聯合的交集

GlassFilm.objects.filter((Q(f_material = 'PP') | Q(f_material = 'PVC')) & (Q(f_color = 'Grey')|Q(f_color = 'Yellow'))) 

* 編輯: *這裏是我想達到的目標。我向用戶提供兩種類型的HTML複選框 (1)材料 (2)顏色

材料中有兩個選項「PP」和「PVC」,用戶可能會打勾。同樣,用戶可能勾選的顏色(「灰色」和「黃色」)中有兩個複選框。 如果用戶勾選「PP」和「灰色」,我想要顯示具有這兩個屬性的對象。如果用戶僅勾選「PP」,我只想顯示那些素材爲「PP」的對象。如果用戶同時勾選「PP」和「PVC」,那麼我想要顯示那些材料爲「PP」或「PVC」的物體。

這是爲了這個目的,我想要一個代碼相當於上面的代碼。現在union()intersect()函數只是僞代碼,我真的想要適當的django/python代碼。

+2

你爲什麼不找那個特定的解決方案? – goncalopp

+0

對於聯合部分http://stackoverflow.com/questions/4411049/how-can-i-find-the-union-of-two-django-querysets –

+0

@goncalopp由於'if(filter)'語句。我想根據特定的條件只獲取一些'GlassFilm'對象。 –

回答

1

您就可以使用&|運營商set對象的十字路口和工會:

intersection = queryset1 & queryset2 

union = queryset1 | queryset2