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 ループを使用してこれを行うことはできますが、コードがうまくいかない.. 利用可能な 1 行のフィルタリング手法があるかどうか疑問に思っていました。

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 に答える