2015-12-08 5 views
0

Для Q object в Django, я хотел бы иметь возможность разобрать AND, OR запросов. Вот пример запроса, который будет обработан:python передать аргументы функции, разделенной символом

from django.db.models import Q 

Poll.objects.filter(
    Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)) 
) 

Этот запрос идентичен:

a = Q(pub_date=date(2005, 5, 2)) 
b = Q(pub_date=date(2005, 5, 6)) 

Poll.objects.filter(
    a | b 
) 

Можно ли разобрать запрос, как показано ниже? Он, очевидно, потерпит неудачу, потому что join возвращает строку, конкатенированную символом |. Но это синтаксис Django ORM, и мы хотели бы динамически анализировать эти запросы без жесткого кодирования аргументов Q.

a = Q(pub_date=date(2005, 5, 2)) 
b = Q(pub_date=date(2005, 5, 6)) 

Poll.objects.filter(
    " | ".join([a,b]) 
) 
+0

Что вы пытаетесь сделать? Объединить объекты Q с '|' оператором? Или разобрать строку? – Mikel

+0

@Mikel Я пытаюсь объединить объекты Q. –

ответ

3

Вы должны быть в состоянии сочинить, что программно, повторив или оператор:

q = Q() 
for some_date in collection_of_dates: 
    q |= Q(pub_date=some_date) 
Poll.objects.filter(q) 

 Смежные вопросы

  • Нет связанных вопросов^_^