【问题标题】:In DJANGO, how do I query for records that do not exist after a certain date?在 DJANGO 中,如何查询某个日期之后不存在的记录?
【发布时间】:2022-01-20 11:05:24
【问题描述】:

假设我有这样的模型:

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 天内未购买的客户。

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

【问题讨论】:

    标签: django django-models


    【解决方案1】:

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

    您可以使用.exclude(…) 处理Customer 模型:

    from datetime import timedelta
    from django.utils.timezone import now
    
    Customer.objects.exclude(
        invoices__date__gte=now()-timedelta(days=30)
    )

    这将返回过去 30 天内与Invoices 记录相关的Customers 中的QuerySet

    【讨论】:

      猜你喜欢
      • 2016-06-29
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 2018-03-07
      • 2013-05-09
      • 1970-01-01
      • 2023-04-10
      • 2014-02-11
      相关资源
      最近更新 更多