分组后的最大注释

Oma*_*mar 7 python django

我想为每组(b,c)对计算"a_priority"的最大值.

a_priority是基于案例/将字符串映射到优先级值时的注释.

from django.db.models import Max, Case, When, IntegerField
qs = MyObject.objects.all()
qs = qs.annotate(
    a_priority=Case(
        When(a='A', then=1), 
        When(a='S', then=2),
        When(a='Q', then=3),        
        output_field=IntegerField()
    )
)
qs = qs.values("b", "c").annotate(Max("a_priority"))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

KeyError: 'a_priority'
Run Code Online (Sandbox Code Playgroud)

我相信qs.values("b", "c")过滤掉我的注释a_priority.行为与任何实际字段不同,提供字段的最大值.

我的django版本在python 3上是1.10.

Pio*_*iek 6

你有没有试过Case直接表达Max自Django 1.8以来就有可能.

from django.db.models import Max, Case, When, IntegerField
qs = MyObject.objects.all()
a_priority=Case(
    When(a='A', then=1), 
    When(a='S', then=2),
    When(a='Q', then=3),        
    output_field=IntegerField()
)
qs = qs.values("b", "c").annotate(max_a_priority=Max(a_priority))
Run Code Online (Sandbox Code Playgroud)