我有以下排除,它会带回所有在过去两分钟内完成交易的图书。我想添加另一个约束,只有来自一系列商店。
在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))
答案 0 :(得分:2)
您可能只想要location__in=(1, 2, 3)
答案 1 :(得分:0)
使用Q object。它们内置于django并允许更复杂的查找。
答案 2 :(得分:0)
从代码中假设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)))
如果我对你的模型的猜测是正确的。