我最近一直在学习django教程,我被卡住了。在使用post方法提交表单之后,我尝试使用.get()方法获取所选的\u choice模型对象,但得到了一个TypeError:cannot unpackage non iterable ModelBase object错误
以下是视图
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect
from django.urls import reverse
from .models import Question, Choice
def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
try:
selected_choice = question.choice_set.get(Question, pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
return render(request, 'polls/detail.html', {'question': question, 'error_message': 'Please select a choice and vote'})
else:
selected_choice.no_of_votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('polls:result', args=(question.id,)))
def result(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/result.html', {'question': question})
以下是模板
详细信息.html
{% block content_main %}
<h2>{{question.question_text}}</h2>
{% if error_message %} <strong>{{error_message}}</strong><br><br> {% endif %}
<form action="{% url 'polls:vote' question.id %}" method="post">
{% csrf_token %}
{% for choice in question.choice_set.all %}
<input type="radio" name="choice" id="choice{{forloop.counter}}" value="{{choice.id}}" style="margin-left: 20px;">
<label for="choice{{forloop.counter}}" style="font-size: 20px;">{{choice.choice_text}}</label><br><br>
{% endfor %} <br>
<input type="submit" value="vote" style="margin-left: 30px; font-size: 20px;">
</form>
{% endblock %}
result.html
{% block content_main %}
<h2>{{question.question_text}}</h2>
{% for choice in question.choice_set.all %}
<ul>
<li>{{choice.choice_text}} -- {{choice.no_of_votes}} vote{{choice.no_of_votes|plural}}</li>
</ul>
{% endfor %}
<a href="{% url 'polls:detail' question.id %}}">Vote again?</a>
{% endblock %}
我收到以下错误消息
> TypeError at /polls/1/vote cannot unpack non-iterable ModelBase object
> Request Method: POST Request URL: http://127.0.0.1:8000/polls/1/vote
> Django Version: 2.2.6 Exception Type: TypeError Exception Value:
> cannot unpack non-iterable ModelBase object Exception
> Location: C:\Users\Neeyat\PycharmProjects\DjangoApps\Polls\venv\lib\site-packages\django\db\models\sql\query.py
> in build_filter, line 1187 Python
> Executable: C:\Users\Neeyat\PycharmProjects\DjangoApps\Polls\venv\Scripts\python.exe
> Python Version: 3.7.4 Python Path:
> ['C:\\Users\\Neeyat\\PycharmProjects\\DjangoApps\\Polls\\mysite',
> 'C:\\Users\\Neeyat\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip',
> 'C:\\Users\\Neeyat\\AppData\\Local\\Programs\\Python\\Python37\\DLLs',
> 'C:\\Users\\Neeyat\\AppData\\Local\\Programs\\Python\\Python37\\lib',
> 'C:\\Users\\Neeyat\\AppData\\Local\\Programs\\Python\\Python37',
> 'C:\\Users\\Neeyat\\PycharmProjects\\DjangoApps\\Polls\\venv',
> 'C:\\Users\\Neeyat\\PycharmProjects\\DjangoApps\\Polls\\venv\\lib\\site-packages',
> 'C:\\Users\\Neeyat\\PycharmProjects\\DjangoApps\\Polls\\venv\\lib\\site-packages\\setuptools-40.8.0-py3.7.egg',
> 'C:\\Users\\Neeyat\\PycharmProjects\\DjangoApps\\Polls\\venv\\lib\\site-packages\\pip-19.0.3-py3.7.egg']
> Server time: Wed, 13 Nov 2019 19:22:30 +0000
在终端,
>[14/Nov/2019 00:52:14] "GET / HTTP/1.1" 404 2027 Not
> Found: /favicon.ico [14/Nov/2019 00:52:16] "GET /favicon.ico HTTP/1.1"
> 404 2078 [14/Nov/2019 00:52:24] "GET /polls/ HTTP/1.1" 200 447
> [14/Nov/2019 00:52:27] "GET /polls/1/ HTTP/1.1" 200 1145 Internal
> Server Error: /polls/1/vote Traceback (most recent call last): File
> "C:\Users\Neeyat\PycharmProjects\DjangoApps\Polls\venv\lib\site-packages\django\core\handlers\exception.py",
> line 34, in inner
> response = get_response(request) File "C:\Users\Neeyat\PycharmProjects\DjangoApps\Polls\venv\lib\site-packages\django\core\handlers\base.py",
> line 115, in _get_response
> response = self.process_exception_by_middleware(e, request) File "C:\Users\Neeyat\PycharmProjects\DjangoApps\Polls\venv\lib\site-packages\django\core\handlers\base.py",
> line 113, in _get_response
> response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\Neeyat\PycharmProjects\DjangoApps\Polls\mysite\polls\views.py",
> line 28, in vote
> selected_choice = question.choice_set.get(Question, pk=request.POST['choice']) File
> "C:\Users\Neeyat\PycharmProjects\DjangoApps\Polls\venv\lib\site-packages\django\db\models\manager.py",
> line 82, in manager_method
> return getattr(self.get_queryset(), name)(*args, **kwargs) File "C:\Users\Neeyat\PycharmProjects\DjangoApps\Polls\venv\lib\site-packages\django\db\models\query.py",
> line 399, in get
> clone = self.filter(*args, **kwargs) File "C:\Users\Neeyat\PycharmProjects\DjangoApps\Polls\venv\lib\site-packages\django\db\models\query.py",
> line 892, in filter
> return self._filter_or_exclude(False, *args, **kwargs) File "C:\Users\Neeyat\PycharmProjects\DjangoApps\Polls\venv\lib\site-packages\django\db\models\query.py",
> line 910, in _filter_or_exclude
> clone.query.add_q(Q(*args, **kwargs)) File "C:\Users\Neeyat\PycharmProjects\DjangoApps\Polls\venv\lib\site-packages\django\db\models\sql\query.py",
> line 1290, in add_q
> clause, _ = self._add_q(q_object, self.used_aliases) File "C:\Users\Neeyat\PycharmProjects\DjangoApps\Polls\venv\lib\site-packages\django\db\models\sql\query.py",
> line 1318, in _add_q
> split_subq=split_subq, simple_col=simple_col, File "C:\Users\Neeyat\PycharmProjects\DjangoApps\Polls\venv\lib\site-packages\django\db\models\sql\query.py",
> line 1187, in build_filter
> arg, value = filter_expr TypeError: cannot unpack non-iterable ModelBase object [14/Nov/2019 00:52:30] "POST /polls/1/vote HTTP/1.1"
> 500 102541
我刚刚开始与后端网络开发,我找不到一个解决方案,这在任何地方。请帮我解决这个问题。先谢谢你
只是你的
views.py
中的一个小错误:在
choice_set
中查找对象时,不再需要指定模型本身相关问题 更多 >
编程相关推荐