我有3个类似下面的模型,我试图在一个查询中获取我的项目的最新销售日期,这绝对可以使用SQL,但我试图使用内置的Django功能:< / p>
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模型可以根据收据的存在来查询条目是否是销售(库存也可以因订单调整或被盗等,我只对最近的销售感兴趣)
我的查询现在看起来像这样,目前只获取最新的任何库存条目。我想过滤注释,只返回在inventoryEntry上的receipt__isnull = False时创建的最大值:
Item.objects.filter(**item_qs_kwargs).annotate(latest_sale_date=Max('inventoryentry_set__created'))
我试图使用When查询表达式,但它没有按预期工作,所以也许我误用了它。任何见解都将不胜感激
答案 0 :(得分:3)
conditional expressions的解决方案应该是这样的:
from django.db.models import Max, Case, When, F
sale_date = Case(When(
inventoryentry__receipt=None,
then=None
), default=F('inventoryentry__created'))
qs = Item.objects.annotate(latest_sale_date=Max(sale_date))
答案 1 :(得分:0)
我尝试了一些修改过的解决方案。看看。
System.getProperty("line.separator");
我没有手动检查。你可以检查并告诉我。
由于