按列表中的值过滤模型

时间:2015-09-23 03:30:55

标签: python django django-models django-views

我有一个带有week_list字段的Book模型,该字段将多个日期存储为列表中的字符串:

['2015-09-15', '2015-09-27']

在我希望的views.py文件中,给定开始日期和结束日期(格式相同)过滤书籍只能在{{1 }}字段位于给定值之间。

e.g。如果某本书的weeks_list字段为:

weeks_list

然后,如果我有['2015-09-15', '2015-09-27'] start_date = 2015-09-10该图书被接受。与s end_date = 2015-09-16tart_date = 2015-09-16相同。

我可以这样做:

end_date = 2015-09-28

如果我可以以某种方式循环它,以便在开始日期和结束日期之间的所有日期都有一个Q对象。这可能吗?

我知道那里有大于/小于过滤器但是从我看过的例子来看,它会对字段中的奇异值起作用而不是值列表。

编辑: 我也试过这个:

allbooks = Book.objects.filter(Q(weeks_list__contains=start_date)|Q(weeks_list__contains='2015-09-27'))

但它不起作用。是否可以使第三行成为"或"声明?

这是模型:

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)

EDIT2:我找到了一个解决方案,我应该使用q.or而不是q.connector。不确定如何将其标记为已解决。

1 个答案:

答案 0 :(得分:0)

您没有日期列表(“$(this).append(date); ”),如果您有文本字段,则应将日期表示为weeks_list而不是dateField's

在查询中使用TextField,您会询问contains是否是另一个子字符串o。

因此,如果您在此stringstart_date = 2015-09-16之间查询图书,则“字符串日期”不是“end_date = 2015-09-28”的子字符串

阅读更多here关于包含django过滤器。