0

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

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

3 回答 3

2

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

于 2013-10-16T16:35:16.883 回答
0

使用Q 对象。它们是 django 内置的,允许更复杂的查找。

于 2013-10-16T16:32:49.827 回答
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)))

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

于 2013-10-16T17:39:04.723 回答