Имеет запрос django для фильтрации через модель и распечатывает условие, соответствующее поиску.Django Filter with AND
Вот мнение
if user_search != '' and (start_date != '' and end_date != ''):
items = Order.objects.filter(
Q(client__email__iexact=user_search) , Q(created_on__range=(start_date, end_date))
)
print "items ", items
Джанго фильтр напечатать адрес электронной почты пользователь искал, который попадет в указанном диапазоне дат. Но код Возникают также печатает электронную почту, что не искали, но попадает в диапазон дат
Вот это модель
class Order(models.Model):
client = models.ForeignKey(User, related_name = "order_user")
order_number = models.CharField(max_length = 12)null=True)
terms_and_conditions = models.BooleanField(default=False)
order_status = models.CharField(max_length = 20, choices = ORDER_STATUS, default = "new")
created_on = models.DateTimeField(auto_now_add = True)
edited_on = models.DateTimeField(auto_now_add = False)
def __unicode__(self):
return self.order_number
Я не могу воспроизвести это в Django 1.8. Наличие двух аргументов 'Q' должно быть эквивалентно использованию оператора' & ', то есть' Q (client__email__iexact = user_search) & Q (created_on__range = (start_date, end_date) '. Обратите внимание, что вам вообще не нужно' Q'. Ваш код может быть упрощен до 'Order.objects.filter (client__email__iexact = user_search, created_on__range = (start_date, end_date)). – Alasdair
@Alasdair Used & operator, но все еще печатает адрес электронной почты, я не искал – uche
. Я хочу сказать, что ваш существующий код ** не должен ** возвращать адреса электронной почты, если дата вне диапазона. Это может помочь, если вы покажете еще один код, который может воспроизвести проблему, и результаты, которые вы получаете. Возможно, вы не используете (например, вы не перезапустили сервер после смены кода). – Alasdair