Вы должны сделать , очевидно , - иначе вы не можете надеяться сделать целочисленные операции. Если у вас уже есть это в производстве, используйте набор миграций для добавления нового IntegerField, заполните его из существующих значений CharField (используя dict для сопоставления старых строковых значений с новыми значениями int) и, наконец, избавитесь от исходного поля.IntegerField
IntegerField
Кроме того, вы можете узнать, как правильно использовать функции ORM Django, такие как получение экземпляров связанных моделей и выполнение агрегаций на уровне DB, то есть:
from django.db.models import Sum, Count, Avg
def rating(request, event_id):
myevent = Event.objects.get(id=event_id)
# this is how you get related models...
feedback_items = myevent.feedback_set.all()
# and this is how you use SQL aggregation functions:
values = feedback_items.aggregate(
sum=Sum('organisation'),
count=Count('pk'),
avg=Avg('organisation')
)
# Now 'values' should be a dict with 'sum', 'count' and 'avg'
# keys, and values['avg'] should be equal to
# float(values['sum']) / values['count']
# FWIW you probably don't need the 'sum' field at all
# I mentionned it so you can check whether 'avg' value
# is correct...
context = {
'feedback_items':feedback_items,
'num_of_items': values['count'],
'avg': values['avg'],
'myevent': myevent,
}
# etc