如何添加OR约束来排除django中的查询?

时间:2013-10-16 16:25:40

标签: sql django django-models django-orm

我有以下排除,它会带回所有在过去两分钟内完成交易的图书。我想添加另一个约束,只有来自一系列商店。

在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))

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

使用Q object。它们内置于django并允许更复杂的查找。

答案 2 :(得分:0)

从代码中假设Book模型包含字段book_idStatus也包含字段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)))

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