Sei*_*eif 4 python django numbers rounding django-views
我在views.py中有这个:
user_list = User.objects.select_related().annotate(rating=Avg('userrating__rating')).order_by('-rating')[:5]
Run Code Online (Sandbox Code Playgroud)
而且我想围绕Avg,所以我有一个很好的整数来评分.
但是,如果我使用 int(Avg('userrating__rating')))
它说:
int()参数必须是字符串或数字,而不是'Avg'
如果我用round(Avg('userrating__rating'))它说:
需要/ a float的TypeError
相同的math.ceil或math.floor
看起来像是一个直接的事情,但我不知道该怎么做.谢谢.
您还可以使用Func()表达式
from django.db.models import Func
class Round(Func):
function = 'ROUND'
template='%(function)s(%(expressions)s, 0)'
user_list = User.objects.select_related().annotate(rating=Round(Avg('userrating__rating'))).order_by('-rating')[:5]
Run Code Online (Sandbox Code Playgroud)
你可以把它投到一个IntegerField.
from django.db.models import IntegerField
user_list = User.objects.select_related().annotate(
rating=Avg('userrating__rating', output_field=IntegerField()))
Run Code Online (Sandbox Code Playgroud)
您不应该尝试在原始 orm 调用上包装任何转换函数,因为您尝试的都不是有效的 django api。但您始终可以在获得结果后转换数字:
for user in user_list:
user.rating = int(user.rating)
Run Code Online (Sandbox Code Playgroud)