我正尝试通过回答问题/问题来订购我的用户
我有以下模型:
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')
但是即使使用此方法,我也总是得到相同的结果,并且用户仍然保持错误的顺序。
答案 0 :(得分:0)
有时您需要为新生成的字段指定output_field
,因为F()
在默认情况下不支持它。您可以通过将其括在ExpressionWrapper()
中来实现。尝试这个。
users = User.objects.annotate(
totalQs=ExpressionWrapper(
F('answeredQuestions') / F('questions'), output_field=Integer())).order_by('totalQs')