【发布时间】:2016-01-12 06:30:23
【问题描述】:
我正在尝试在 Django/Python 中编写以下查询:
在这个查询中,我没有一个简单的or,但我也有很多ands 和一个sum
SELECT sum(value) FROM myapp_category
WHERE (name='difficulty' AND key='hard')
OR (name= 'success' AND key='yes')
OR (name= 'alternative' AND key='yes')
OR (name= 'processing' AND key='good')
OR (name= 'personal_touch' AND key='yes') `
这是我的模型:
class Category(models.Model):
name = models.CharField(max_length=50)
key = models.CharField(max_length=30)
value = models.FloatField(blank=True, default=0)
def __str__(self):
return self.name.encode('utf_8') + "_" + self.key.encode('utf_8')
而且我不想使用原始 sql,那么我可以使用什么?
更新答案: 感谢您的回答,这是完整的答案:
sum = Category.objects.filter(Q(name='difficulty',key=evaluation.difficulty) |
Q(name='nogos',key=evaluation.nogos) |
Q(name='success',key=evaluation.success) |
Q(name='alternative',key=evaluation.alternative) |
Q(name='processing',key=evaluation.processing) |
Q(name='personal_touch',key=evaluation.personal_touch))
.aggregate(result=Sum('value'))
score = float(sum['result'])
【问题讨论】:
-
你有型号吗?你能在你的问题中发布它们吗?
-
我更新了我的问题 ;)
-
Django Filters - or?的可能重复
-
在这个问题中,我没有一个简单的
or,我也有很多ands。 -
@SafaaNa - 如 Geo Jacobs 的回答所示,您的答案与重复的答案差别不大。
标签: python mysql django django-queryset