Во-первых, мне нужно суммировать оценку студента, прежде чем конвертировать ее в процент. Таким образом, я сумел суммировать свою оценку и каким-то образом преобразовал ее в процент с помощью этого метода.
students = MarkAtt.objects.values('studName__VMSAcc').annotate(mark=Sum('attendance'), percentage=(F('mark')/1100) * 100)
Однако я понял, что F () не принимает десятичное значение. Он принимает только целочисленное значение. Это может привести к ошибке в моем процентном расчете, если значение 'mark' меньше 100.
Например: 600/1100 = 0.54545, тогда будет только 0 к кратному 100. И выведите '0'вместо 54%.
Как разрешить функции принимать десятичное значение?
РЕДАКТИРОВАНИЕ:
def file_load_view(request):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="studFinal-attendance.csv"'
writer = csv.writer(response)
writer.writerow(['Student Name', 'Attendance'])
students = MarkAtt.objects.values('studName__VMSAcc').annotate(mark=Sum('attendance'),
percentage=(Cast('mark', FloatField())/1100) * 100)
#convert the students query set to a values list as the writerow expects a list/tuple
students = students.values_list('studName__VMSAcc','percentage')
for student in students:
writer.writerow(student)
return response