UPDATE
感谢发布的答案,我找到了一种更简单的方法来制定问题.原始问题可以在修订历史中看到.
我正在尝试将SQL查询转换为Django,但是我收到了一个我不理解的错误.
这是我的Django模型:
class Title(models.Model):
title_id = models.CharField(primary_key=True, max_length=12)
title = models.CharField(max_length=80)
publisher = models.CharField(max_length=100)
price = models.DecimalField(decimal_places=2, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
我有以下数据:
publisher title_id price title
--------------------------- ---------- ------- -----------------------------------
New Age Books PS2106 7 Life Without Fear
New Age Books PS2091 10.95 Is Anger the Enemy?
New Age Books BU2075 2.99 You Can Combat Computer Stress!
New Age Books TC7777 14.99 Sushi, Anyone?
Binnet & Hardley MC3021 2.99 The Gourmet Microwave
Binnet & Hardley MC2222 19.99 Silicon Valley …Run Code Online (Sandbox Code Playgroud) 我想为每组(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.