(можно только объединить str (не int) с str) это ошибка, которую я получаю, почему он говорит, что я пытаюсь добавить строку и int? - PullRequest
0 голосов
/ 08 мая 2020

enter image description here Я следую django официальному руководству по документации t создать приложение для опроса, в настоящее время я застрял на части 4. Поэтому, когда я выбираю один из вариантов, он показывает ошибку (может только объединить str (не int) на str). Я не могу понять, пытаюсь ли я добавить строку к целому числу, где проблема в коде

пожалуйста, вот мой код:

views.py

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from .models import Choice, Question


def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)


def detail(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/detail.html', {'question': question})


def results(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/results.html', {'question': question})


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,)))

urls.py

from django.urls import path
from . import views

app_name = 'polls'
urlpatterns = [
    path('', views.index, name='index'),
    path('<int:question_id>/', views.detail, name='detail'),
    path('<int:question_id>/results/', views.results, name='results'),
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

models.py

import datetime
from django.db import models
from django.utils import timezone


class Question(models.Model):
    question_text = models.CharField(max_length=250)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

1 Ответ

0 голосов
/ 08 мая 2020

Для устранения неполадок вы можете удалить конкатенацию и вставить print(type(variable_name)) по всему коду, чтобы напечатать тип переменной, чтобы увидеть, где python присваивает тип string вашей переменной.

Включая полный сообщение об ошибке будет полезно для любого дополнительного устранения неполадок.

Похоже, что django не приводит значение к целому числу, поэтому я подозреваю, что именно в этом и заключается ваша проблема. votes = models.IntegerField(default=0) из вашего models.py. Здесь есть связанный вопрос, который также предлагает устранение неполадок, аналогичное тому, что я предлагал. Затем явно преобразовать это значение в целое число. Django IntegerField возвращает строку (!) - как привести к int?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...