【问题标题】:how to add OR constraints to exclude query in django?如何在 django 中添加 OR 约束以排除查询?
【发布时间】:2013-10-24 21:06:18
【问题描述】:

我有以下排除项,它会带回在过去两分钟内进行过交易的所有书籍。我想添加另一个约束条件,仅说明是否来自一系列商店。

在 SQL 中,location_id = 1 或 location_id = 2 或 location_id = 3

书籍有一个 location_id

如何将其应用于以下查询?

transaction_window = timezone.now() + datetime.timedelta(minutes=-2)

ts = Book.objects.exclude(book_id__in = Status.objects
                             .filter(transaction_time__gte=transaction_window)
                             .values_list('book_id', flat=True))

【问题讨论】:

  • Book.objects.exclude(status__transaction_time__gte=transaction_window)

标签: sql django django-models django-orm


【解决方案1】:

从您的代码中假设 Book 模型具有字段 book_id 并且 Status 也具有字段 book_id 并且该字段只是普通的 IntegerField 或类似字段。

from django.db.models import Q

transaction_window = timezone.now() - datetime.timedelta(minutes=2)

statuses = Status.objects.filter(transaction_time__gte=transaction_window)
ts = Book.objects.filter(~Q(book__id__in=statuses)
                         | ~Q(location_id__in=(1, 2, 3)))

如果我对你的模型的猜测是正确的。

【讨论】:

    【解决方案2】:

    你可能只想要location__in=(1, 2, 3)

    【讨论】:

      【解决方案3】:

      使用Q object。它们是 django 内置的,可以进行更复杂的查找。

      【讨论】:

        猜你喜欢
        • 2023-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多