Модели Django с выбором как целое

Я пытаюсь сделать приложение обратной связи в Django, но я не могу сделать свои оценки.

В моих models.py у меня есть 5 вариантов от очень плохого к отличному. Но я хочу, чтобы они были пригодны для использования в качестве чисел, поэтому я могу оценить общую ценность.

После чтения Обратная связь ( модели . Модель ): event = models . ForeignKey ( Event ) # Выбор VERYBAD = 'Очень плохо' #old BAD = 2 #new ХОРОШО = 3 ХОРОШО = 4 ОТЛИЧНОЕ = 5 RATING = ( ( VERYBAD , 'Очень плохо' ), ( BAD , 'Bad' ), ( ХОРОШО , 'Хорошо' ), ( ХОРОШО , 'хорошо' ), ( ОТЛИЧНО , 'Отлично' ), ) # рейтинги организация = модель . CharField ( max_length = 9 , выбор = RATING , по умолчанию = ХОРОШО , ) .... -по-выбор-имя "> Установить Django IntegerField на выбор = ... Имя я изменил свои рейтинги от VERYBAD = 'Очень плохо'чтобы VERYBAD = 1, но я не могу даже сохранить свою ценность / форму.

def rating(request, event_id):
    myevent = Event.objects.get(id=event_id)
    feedback_items = Feedback.objects.filter(event=myevent)
    num_of_items = len(feedback_items)

    def evaluate(feedback_items):
       # The overall rating
       organisation = 0
       for item in feedback_items: 
            organisation += item.organisation

       organisation /= num_of_items

    context = {'feedback_items':feedback_items,
           'num_of_items': num_of_items,
           'myevent': myevent,}

return render(request, 'feedback/rating.html', context)

Поэтому, на мой взгляд, я думал, что смогу сделать математику, но не могу.

organisation

`

django,integer,django-views,choicefield,

0

Ответов: 1


0 принят

Вы должны сделать , очевидно , - иначе вы не можете надеяться сделать целочисленные операции. Если у вас уже есть это в производстве, используйте набор миграций для добавления нового IntegerField, заполните его из существующих значений CharField (используя dict для сопоставления старых строковых значений с новыми значениями int) и, наконец, избавитесь от исходного поля.IntegerFieldIntegerField

Кроме того, вы можете узнать, как правильно использовать функции 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
Джанго, целое число, Джанго-просмотры, choicefield,
Похожие вопросы