Задать вопрос
@aspitsin138

Как устранить ошибку: "can only concatenate str (not "int") to str: Django?

Изучаю документацию Django, следую строго инструкции, получаю ошибку на которую не смог нагуглить ответ:
selected_choice.votes += 1
TypeError: can only concatenate str (not "int") to str
Причина ясна, но как ее исправить?
Код:
def vote(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = question.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        # Redisplay the question voting form.
        return render(request, 'polls/detail.html', {
            'question': question,
            'error_message': "You didn't select a choice.",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        # Always return an HttpResponseRedirect after successfully dealing
        # with POST data. This prevents data from being posted twice if a
        # user hits the Back button.
        return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))

def results(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/results.html', {'question': question})
  • Вопрос задан
  • 340 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
trapwalker
@trapwalker
Программист, энтузиаст
У вас, очевидно, selected_choice.votes - это строка, а вы пытаетесь применть оператор += с елым числом. Об этом вам и выдаётся ошибка. Нельзя к строке прибавить число.

Пожалуйста, впредь приводите полный код. В частности не хватает описания модели Choice.
А ещё нужно приводить целиком стек-трейс, чтобы не заставлять отвечающих читать ваш код целиком выискивая глазами причину ошибки.

В модели нужно votes сделать целочисленным,если вы хотите прибавлять к этому полю числа. Иногда тип поля меняют, но необходимые миграции не накатыают на БД и при десериализации инстанса модели у этого инстанса атрибут, обозначенный в модели как целочисленный. может оказаться строковым, как по-прежнему указано в схеме БД.

Делайте миграции или меняйте схему вручную для приведения в соответствие с моделью.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
fox_12
@fox_12 Куратор тега Django
Расставляю биты, управляю заряженными частицами
>>> somevar = ''
>>> somevar += 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str


похоже на вашу ошибку?
Ну так у вас в переменной - тоже строка. Преобразовывайте в int. Благо операция преобразования так и называется...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы