Python Django复杂注释:这可能吗?

Python Django复杂注释:这可能吗?,python,django,aggregate-functions,django-orm,Python,Django,Aggregate Functions,Django Orm,我正在尝试做一些对于Django当前的ORM特性来说可能太复杂的事情。但是,无论如何,让我们试试看 首先,以下是我正在使用的模型: class Location(models.Model): name=models.CharField(max_length=255) beverages = models.ManyToManyField(Beverage, through='LocationStandard') location_number=models.CharField(max_

我正在尝试做一些对于Django当前的ORM特性来说可能太复杂的事情。但是,无论如何,让我们试试看

首先,以下是我正在使用的模型:

class Location(models.Model):
  name=models.CharField(max_length=255)
  beverages = models.ManyToManyField(Beverage, through='LocationStandard')
  location_number=models.CharField(max_length=255)
  organization=models.CharField(max_length=255)

class OrderGroup(models.Model):
  id = models.AutoField(primary_key=True)

  def __unicode__(self):
      return str(self.id)

class Order(models.Model):
  group=models.ForeignKey(OrderGroup)
  location=models.ForeignKey(Location) #elim this or m2m
  beverage=models.ForeignKey(Beverage)
  units_ordered=models.IntegerField(max_length=10, default=0)
  order_delivered=models.NullBooleanField(null=True)
  timestamp=models.DateTimeField(auto_now_add=True)
  user=models.ForeignKey(User)
以下是我试图在模板中呈现的内容:

{{ location.name }}
{{ location.latest_order }}
{{ location.unfilled_orders }}
因此,我需要列出每个位置,最后一次从该位置下订单的时间,以及订单数量的计数

我可以成功地获得最近的订单时间戳,如下所示:

locations = Location.objects.annotate(latest_order=Min('order__timestamp')).order_by('latest_order')
但现在我想对该订单的订单进行计数。我被难住了


对我有什么帮助吗?

这样行吗

locations = Locations.objects.annotate(
    unfilled_orders= Count('order', filter=Q(order__delivered=False),
    latest_order=Min(order__timestamp),
).order_by('unfilled_orders')  # If you like
第一个注释添加了
未完成的订单
,作为该位置的订单计数,其中
已交付==False
。第二个,您已经发现,获取最新订单的时间戳

免责声明:我还没有测试过这个。如果有错误,请进行编辑:)

点击此处查看更多方便的咒语:

自Django 2.0以来,
Count
filter
参数一直存在。Django 1.11中的子查询表达式也可以实现这一点:


count=locations.filter(order\uu delivered=False)。count()
?我想我可以这样注释这个查询
locations=count.objects.annotate(latest\u order=Min('order\u timestamp')。order\u by('latest\u order'))
今晚我到家后会试试看什么是
count
?在我的评论中是一个
int
。对不起,读得太快了,我不能只用一个整数做任何事情,我需要知道这个整数与模板中的位置有某种关系,但我想我可以用这样的方法:
count=locations.filter(order\u delivered=False)。annotation(undelivered=count(order\u delivered))
然后
locations=count.objects.annotation(最新订单=Min('order\uu timestamp')。order\u by('update\u order‌​r'))