У меня есть модель книги с weeks_list поле, которое хранит несколько дат в виде строк в списке:модели Фильтрация по значениям в пределах списка
['2015-09-15', '2015-09-27']
В моем views.py
файл я хочу, чтобы иметь возможность, учитывая дату начала и дату окончания (в том же формате), чтобы фильтровальные книги были только те, у которых по крайней мере одна из их дат в поле weeks_list
находилась между данными значениями.
например. если книга имеет weeks_list
поле:
['2015-09-15', '2015-09-27']
Тогда, если у меня есть start_date = 2015-09-10
и end_date = 2015-09-16
, что книга принята. То же самое, если s tart_date = 2015-09-16
и end_date = 2015-09-28
.
я могу сделать что-то вроде этого:
allbooks = Book.objects.filter(Q(weeks_list__contains=start_date)|Q(weeks_list__contains='2015-09-27'))
И если бы я мог каким-то образом кольцую иметь объект Q для всех дат между даты начала и окончания, которые будут работать. Это возможно?
Я знаю, что есть больше или меньше фильтров, но из примеров, на которые я смотрел, будет работать на сингулярном значении в поле, а не в списке значений.
EDIT: Я также попытался это:
allbooks = Book.objects.all()
q=Q(weeks_list__contains='2015-09-12')
q = q.add((Q(weeks_list__contains='2015-09-15')), q.connector)
allbooks = allbooks.filter(q)
Но это не работает. Можно ли сделать третью строку выражением «или»?
Это модель:
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=200)
rating = models.CharField(max_length=5)
genre = models.CharField(max_length=200)
NYT_image_url = models.CharField(max_length=200)
GR_image_url = models.CharField(max_length=200)
isbns = models.TextField(max_length=600)
weekly_rank = models.TextField(max_length=1000)
weeks_list = models.TextField(max_length=1000)
goodreads_ID = models.CharField(max_length=25)
goodreads_URL = models.CharField(max_length = 100)
NYT_description = models.TextField(max_length = 500)
EDIT2: Я нашел решение, я должен использовать q.or вместо q.connector. Не знаете, как это отметить.
Почему бы вам не показать нам свою модель? – ozgur