Нахождение среднего значения IntegerField

Я пытаюсь создать новое поле данных, которое хранит значение в соответствии со средним значением 3 полей, а также хочу использовать orderby в файле views.py


class TodoList(models.Model):username = models.CharField(max_length = 50)
title = models.TextField(max_length = 100)
num1 = models.IntegerField()
num2 = models.IntegerField()
num3 = models.IntegerField()
#average = (num1 + num2 + num3)/3  -> NoneType error

Я пытаюсь создать новое поле данных, которое хранит значение в соответствии со средним значением 3 полей, а также хочу использовать orderby в файле views.py

def profile(request, pk):
user_object = User.objects.get(username = pk)
user_profile = Profile.objects.get(user = user_object) #user_profile has the things related to that usertodolist = TodoList.objects.filter(username = pk).order_by('average')

context = {
    'user_object' : user_object,
    'user_profile' : user_profile,
    'todolist' : todolist,
}
return render(request, 'profile.html', context)

Я пытался использовать функцию property, но не смог order_by из этой функции. Но смог передать его в html-странице

#average = (num1 + num2 + num3)/3 -> Вы не можете этого сделать, класс Model предназначен только для определения схемы таблицы.

Вы должны будете рассчитать среднее отдельно и отправить его в своей модели

class TodoList(models.Model):
    username = models.CharField(max_length = 50)
    title = models.TextField(max_length = 100)
    num1 = models.IntegerField()
    num2 = models.IntegerField()
    num3 = models.IntegerField()
    average = models.DecimalField()

Запустите ваши миграции, затем передайте данные из места, где вы создаете объект TodoList.

Вероятно, это будет в ваших представлениях. Итак, в ваших представлениях сделайте

num1 = 123
num2 = 321
num3 = 231
average = (num1 + num2 + num3 )/ 3
todo = TodoList.objects.create(
    username = "Any username",
    title = "Any title",
    num1 = num1,
    num2 = num2,
    num3 = num3,
    average = average
)
Вернуться на верх