我有以下型号:
class City(models.Model):
...
class Census(models.Model):
city = models.ForeignKey(City)
date = models.DateTimeField()
value = models.BigIntegerField()
Run Code Online (Sandbox Code Playgroud)
现在我想用最新的人口普查值来注释City-queryset.我如何实现这一目标?
我试过了:
City.objects.annotate(population=Max('census__date'))
# --> annotates date and not value
City.objects.annotate(population=Max('census__value'))
# --> annotates highest value, not latest
City.objects.annotate(population=
Case(
When(
census__date=Max('census__date'),
then='census__value')
)
)
# --> annotates 'None'
City.objects.annotate(population=
Case(
When(
census__date=Max('census__date'),
then='census__value')
), output_field=BigIntegerField()
)
# --> takes forever (not sure what happens at the end, after some minutes I stopped waiting)
Run Code Online (Sandbox Code Playgroud)
任何帮助非常感谢!
如何在单个表达式中从多对一关系的过滤结果中获取最新值以注释 Django QuerySet?
鉴于此玩具模式:
from django.db import models
class Lorem(models.Model):
""" Lorem ipsum, dolor sit amet. """
class LoremStatusEvent(models.Model):
""" A status event change on a given `ipsum` for a `lorem`. """
created = models.DateTimeField(auto_now_add=True)
lorem = models.ForeignKey(Lorem)
ipsum = models.CharField(max_length=200)
status = models.CharField(max_length=10)
Run Code Online (Sandbox Code Playgroud)
为了在Django LoremAdmin(用于Lorem模型)中创建自定义QuerySet ,我需要:
foo_status和bar_status每个从分开的JOIN子句到一个LoremStatusEvent模型:lorem.loremstatusevent_set__status。Ipsum值的事件:foo_status_events=LoremStatusEvent.filter(ipsum='foo')。foo_status=LoremStatusEvent.objects.filter(ipsum='foo').latest('created').status。foo_status和。bar_statusqueryset = …