0

我想过滤一些不包括周末的日期。我已经有周末天数的列表

我想创建一个过滤这些天的查询。我在模型中有一个日期字段

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 循环来做到这一点,但代码会很糟糕。我想知道是否有任何可用的单行过滤技术。

4

3 回答 3

2

您可以使用in运算符:

Sample.objects.filter(Q(date__month=month)).exclude(Q(date__day__in=weekends))
于 2013-02-20T05:16:39.807 回答
2

您可以使用 IN 子句。

Sample.objects.filter(date__month=month).exclude(date__day__in = weekends)

来自 DateField 的 django 源代码:

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避免命名空间冲突的名称吗?

于 2013-02-20T05:17:58.547 回答
1

最后,我想通了。exclude(date__day__in=weekends)不起作用。我不知道使用 in 查询时复杂的查找是否会出错。

所以我所做的是使用那些日子创建一些日期。并做了类似的事情

Sample.objects.filter(Q(date__month=month)).exclude(Q(date__in=weekends))
于 2013-02-20T05:44:25.853 回答