Python Django复杂注释:这可能吗?
我正在尝试做一些对于Django当前的ORM特性来说可能太复杂的事情。但是,无论如何,让我们试试看 首先,以下是我正在使用的模型: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_
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 orderr'))