相关疑难解决方法(0)

使用条件注释在Django 1.8中使用最新相关值进行注释

我有以下型号:

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 django-orm django-queryset django-1.8

28
推荐指数
2
解决办法
3300
查看次数

使用来自筛选后的联接的最新值注释QuerySet

如何在单个表达式中从多对一关系的过滤结果中获取最新值以注释 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_statusbar_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 = …

django annotations join django-models

5
推荐指数
1
解决办法
1667
查看次数