相关疑难解决方法(0)

Django中GROUP BY中注释的聚合

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)

sql django django-models django-orm

26
推荐指数
2
解决办法
9241
查看次数

分组后的最大注释

我想为每组(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.

python django

7
推荐指数
1
解决办法
341
查看次数

标签 统计

django ×2

django-models ×1

django-orm ×1

python ×1

sql ×1