在python django查询集中排除周末

时间:2013-02-20 05:00:56

标签: python django

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

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

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循环执行此操作,但代码会很糟糕.. 我想知道是否有任何一种线路过滤技术可用。

3 个答案:

答案 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))