2012-11-20 32 views
3

我有一个模型的Django模型这样的总和最大:我想找到马克斯(fieldB + fieldC)Django中,发现2场

class MyModel(models.Model): 
    fieldA = models.CharField(max_length=100) 
    fieldB = models.IntegerField() 
    fieldC = models.IntegerField() 

。有Django的方式来做到这一点?或者我必须去与原始的SQL(如果它会像“选择最大(fieldA + fieldB)从mymodel_table”)?

在此先感谢

+1

*原始的SQL是选择MAX(fieldB + fieldC)从mymodel_table .. – user1839352

回答

6

这里适合一个相当迂回的解决方案,它应该工作,从Django aggregate queries with expressions

MyModel.objects.extra(select={'sum':'fieldB + fieldC'}).order_by('-sum')[0] 

原非工作答案(如Django的1.4,F()的表达式请勿在注释中使用)

您可以使用F() expressionsannotation/aggregation为您做到这一点。我想你想要的是。

from django.db.models import F, Max 
MyModel.objects.annotate(sum=F('fieldB') + F('fieldC')).aggregate(Max('sum')) 
+0

我想你的建议,但它给了我一个AttributeError -'ExpressionNode”对象有没有属性‘查找’ – user1839352

+0

你说得对。 .. https://code.djangoproject.com/ticket/14030。试试http://stackoverflow.com/questions/10221422/django-aggregate-queries-with-expressions中的解决方案。让我知道这是否有效,我会更新答案。 – acjay

+0

@ user1839352:现在就试试 – acjay