在 DJANGO 中,如何查询在特定日期后不存在的记录?

In DJANGO, how do I query for records that do not exist after a certain date?

假设我有这样一个模型:

class Invoices(models.Model):
    customer = models.ForeignKey(Customer, ...)
    date = models.DateField()
    amount = models.FloatField()

我想知道在过去 30 天内没有购买的所有客户。

基本上与此查询相反:

no_sales = Invoices.objects.filter(
    date__gte=certain_date_30_days_ago
).values(
    'customer__code'
)

使用.exclude()只排除最近30天购买过的客户,不包括最近30天未购买的客户。

有什么想法吗? :) 谢谢!

Invoice 模型上使用 .exclude(…) [Django-doc] 将不起作用:它将不包括任何从未购买过任何东西的 Customer。但是这些仍然包括在 之前买过东西的人:事实上,如果一个 Customer 在 100 天前买了东西,然后在 20 天前买了东西,那 Customer 仍然会被包括在内,因为第二笔交易的Invoice被包括在内,但是100天前的那笔仍然会被保留。

您可以在 Customer 模型上使用 .exclude(…) 和:

from datetime import timedelta
from django.utils.timezone import now

Customer.objects.exclude(
    <b>invoices__date__gte=now()-timedelta(days=30)</b>
)

这将 return CustomerQuerySet 与上一个 Invoices 记录相关30 天。