我想过滤一些不包括周末的日期。 我已经有了周末的日期列表
我想创建一个过滤这些天的查询。 我在模型中有一个日期字段
Class Sample(models.Model)
date=models.DateField()
weekends = [2, 3, 9, 10, 16, 17, 23, 24]
Sample.objects.filter(date__month=month).exclude(date__day=weekends)
我可以使用for循环执行此操作,但代码会很糟糕.. 我想知道是否有任何一种线路过滤技术可用。
答案 0 :(得分:2)
您可以使用 运算符:
Sample.objects.filter(Q(date__month=month)).exclude(Q(date__day__in=weekends))
答案 1 :(得分:2)
您可以使用IN子句。
Sample.objects.filter(date__month=month).exclude(date__day__in = weekends)
来自DateField的django soruce代码:
def get_prep_lookup(self, lookup_type, value):
# For "__month", "__day", and "__week_day" lookups, convert the value
# to an int so the database backend always sees a consistent type.
if lookup_type in ('month', 'day', 'week_day'):
return int(value)
理想情况下__day
应该有效。您是否还可以尝试将字段名称从date
更改为created_date
以避免命名空间冲突?
答案 2 :(得分:1)
最后,我想到了这一点。 exclude(date__day__in=weekends)
不起作用。我不知道使用查询时可能会出现复杂的查找错误。
所以我所做的是使用那些日子创建一些日期。并做了像
这样的事情Sample.objects.filter(Q(date__month=month)).exclude(Q(date__in=weekends))