【发布时间】:2017-03-09 12:06:15
【问题描述】:
我有 3 个类似于下面的模型,我试图在单个查询中获取我的项目的最新销售日期,这绝对可以使用 SQL,但我正在尝试使用内置的 Django 功能:
class Item(models.Model):
name = models.CharField()
...
class InventoryEntry(models.Model):
delta = models.IntegerField()
item = models.ForeignKey("Item")
receipt = models.ForeignKey("Receipt", null=True)
created = models.DateTimeField(default=timezone.now)
...
class Receipt(models.Model):
amt = models.IntegerField()
...
我要做的是查询我的商品并注释最后一次销售它们的时间。 InventoryEntry 模型可以根据收据的存在来查询一个条目是否是销售(库存也可以因为订单,或者被盗等而调整,我只对最近的销售感兴趣) .
我的查询现在看起来像这样,它目前只是获取最新的 ANY 库存条目。我想过滤注释以仅返回 InventoryEntry 上的接收__isnull=False 时创建的最大值:
Item.objects.filter(**item_qs_kwargs).annotate(latest_sale_date=Max('inventoryentry_set__created'))
我尝试使用 When 查询表达式,但它没有按预期工作,所以我可能误用了它。任何见解将不胜感激
【问题讨论】:
-
我有一个使用 RawSQL 对象的解决方法,但如果我能提供帮助,我宁愿没有自己的 SQL。
-
您实际上还没有发布您使用When的尝试
-
我认为它不值得发布,因为它没有按预期工作。我希望有人知道如何获得我的问题所要求的内容,我发布不起作用的内容不会有太大帮助。如果您有想法,我很乐意尝试并发布结果。
-
filter(inventoryentry__receipt__isnull=False)在filter(**item_qs_kwargs)之后不起作用?