условный фильтр Django ИЛИ - PullRequest
       1

условный фильтр Django ИЛИ

1 голос
/ 25 сентября 2011
if w:
    conditions['is_discount_table'] = 'Q( is_discount_table = True )'
    conditions['is_discount_banquet'] = 'Q( is_discount_banquet = True )'

pl = Place.objects.filter( **conditions ).order_by( 'name' )

SQL WHERE выглядит как

WHERE (
    "places_place"."is_discount_banquet" = true AND 
    "places_place"."is_discount_table" = true 
)

Как изменить w условие, что SQL WHERE выглядит как

WHERE (

        "places_place"."is_discount_banquet" = true OR
        "places_place"."is_discount_table" = true 

    )

эквивалент

Place.objects.filter( Q( is_discount_table = True ) | Q( is_discount_banquet = True ) )

Ответы [ 3 ]

3 голосов
/ 25 сентября 2011

я нашел ответ:

conditions_unnamed = list()
conditions_named = dict( )
if type:
    conditions_named['types__id__in'] = list_unique( type.split( '-' ) )
if w:
    conditions_unnamed.append( Q( is_discount_table = True ) | Q( is_discount_banquet = True ) )
pl = Place.objects.filter( *conditions_unnamed, **conditions_named ).order_by( 'name' )

если кто-нибудь знает лучшее решение, пожалуйста, поделитесь.

0 голосов
/ 23 ноября 2012
queres = {Q()}
...
if ...
queres.update({Q(deprecation_date__lte=datetime.date.today())})
if ...
queres.update({Q(deprecation_date=None)})
...
devices = Device.objects.filter(*queres)
0 голосов
/ 25 сентября 2011

Вы, кажется, добавили дополнительную логику.Я думаю, это то, что вы пытаетесь выразить:

pl = Place.objects.all()
if type:
    pl = pl.filter(types__id__in=type.split( '-' ))
if w:
    pl = pl.filter( Q( is_discount_table = True ) | Q( is_discount_banquet = True ) )
pl = pl.order_by( 'name' )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...