Django按两个字段的总和排序不起作用

时间:2019-04-07 14:30:34

标签: python django django-models pycharm

我正尝试通过回答问题/问题来订购我的用户

我有以下模型:

class User(models.Model):
    firstname = models.CharField(max_length=100)
    lastname = models.CharField(max_length=100)
    username = models.CharField(max_length=100)
    questions = models.IntegerField(null=True)
    answeredQuestions = models.IntegerField(null=True)

我正在尝试以下操作:

users = User.objects.extra(
        select={'fieldsum': 'answeredQuestions / questions'},
        order_by=('-fieldsum',)

然而,当仅将('fieldsum')更改为('-fieldsum')时,它仍然产生相同的结果。 我还尝试了以下方法:

users = User.objects.annotate(total=F('answeredQuestions') / F('questions')).order_by('total')

但是即使使用此方法,我也总是得到相同的结果,并且用户仍然保持错误的顺序。

1 个答案:

答案 0 :(得分:0)

有时您需要为新生成的字段指定output_field,因为F()在默认情况下不支持它。您可以通过将其括在ExpressionWrapper()中来实现。尝试这个。

users = User.objects.annotate(
    totalQs=ExpressionWrapper(
        F('answeredQuestions') / F('questions'), output_field=Integer())).order_by('totalQs')