Django polls应用中Django表单传递问题?;.choice_set.all不被调用?;Django choice_id?

我昨天晚上的思路是表单的传递过程出了问题。一直没有想到哪里有错误,然后查看了前段的源码发现

<h1>What&#39;s up?</h1>



<form action="/polls/1/vote/" method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="lUktos7JDPePxWA5rJU1RAmPNlKTBWFcwf8GRWbncpiNjWaKGLK2RW9Q472l9lfo">

<input type="submit" value="Vote">
</form>

回过头对比一下detail.html

<h1>{{ question.question_text }}</h1>

{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% 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 }}">
    <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br>
{% endfor %}
<input type="submit" value="Vote">
</form>

发现其中
{% for choice in question.choice_set.all %} <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}"> <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br> {% endfor %}
这三行代码没没有作用。
造成的原因就是 question.choice_set.all没有返回值。
是的 ,回顾一下 第二篇记录的时候,我只给数据库中的Question创建生成了两个记录,而choice没有对应的记录。官方文档是有创建的,可是我是看完文档再重新打的代码,所以就tm忘记了。所以看文档之后打代码请细心

解决方案:给Choice表补充对应的记录

C:\Users\86150\Desktop\我的PYTHON项目\mysite>python3 manage.py shell
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 22:45:29) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from polls.models import Choice, Question
>>> Question.objects.all()
<QuerySet [<Question: What's up?>, <Question: what fuck>]>
>>> Choice.objects.all()
<QuerySet []>                     #看这里,空数组,因为我们没有对此创建记录值
>>> q1=Question.objects.all()[0]
>>> q2=Question.objects.all()[1]
>>> c1=Choice.objects.all()[0]
>>> c2=Choice.objects.all()[1]
>>> c1.question
<Question: What's up?>
>>> c1.question=q1
>>> c2.question=q2
>>> c1.choice_text="vote"
>>> c2.choice_text="vote"
>>> c1.save()
>>> c2.save()

现在启动服务器查看


功能便可以正常使用了

然后又按照官方文档改了一下
大致就是将Choice表删除了我上方的vote,在创建not much 和 the sky两个选项。
这里使用关系对象创建的

这里只记录一下核心代码
q = Question.objects.get(pk=1)
# delete vote
c = q.choice)set.filter(choice_text='vote')
c.delete()

# create not much and the sky
>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text='The sky', votes=0)
<Choice: The sky>

按官方文档的效果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值