我试图允许用户更新模型的布尔变量,但我似乎无法将更改保存到数据库,然后将更改呈现给模板。该模型是' Pic'布尔变量是' Good'。
在模板中(命名空间' single_picture'):
<form action="" method="POST">
{% csrf_token %}
{% if Pic.Good %}
<input type="submit" name="choice" id="{{ Pic.id }}" value="False" />
{% else %}
<input type="submit" name="choice" id="{{ Pic.id }}" value="True" />
{% endif %}
</form>
在应用的网址中:
url(r'^(?P<Pic_id>\d+)/$', views.single_picture, name='single_picture'),
并在views.py中:
def single_picture(request, Pic_id):
# 'detail' in tutorial
if request.method == 'GET':
pic = get_object_or_404(Pic, pk=Pic_id)
latest_pictures_list = Pic.objects.all()
return render(request, 'pictures/single_picture.html', {'Pic': pic, 'latest_pictures_list': latest_pictures_list})
elif request.method == 'POST':
pic = get_object_or_404(Pic, pk=Pic_id)
latest_pictures_list = Pic.objects.all()
try:
pic.Good=request.POST['choice']
except (KeyError, Pic.DoesNotExist):
return render(request, 'pictures/single_picture.html', {'Pic': pic, 'error_message': 'uhhhh...',
})
else:
pic.save()
return HttpResponseRedirect(reverse('pictures:pic', pic.id))
如果我在try:语句末尾打印pic.Good到终端我可以看到它显示已更改的一个,但pic.save()似乎没有将它保存到db,我也得到了
在/ pictures / 4 /
处配置不当包含的urlconf 4中没有任何模式
在render语句中。这似乎表明项目或应用程序的网址中缺少某些内容。如何正确保存更改并进行更改?
答案 0 :(得分:1)
根据django documentation on reverse function,第二个参数是urlconf参数。
urlconf参数是包含用于反转的url模式的URLconf模块。
要为url构造提供参数,您需要使用 args 或 kwargs 命名参数。
尝试将return语句更改为以下内容:
return HttpResponseRedirect(reverse('pictures:pic', args=[pic.id]))
我不了解数据库保存问题,但尝试将您的图片保存调用更接近pic更新代码以进行调试:
elif request.method == 'POST':
pic = get_object_or_404(Pic, pk=Pic_id)
latest_pictures_list = Pic.objects.all()
try:
pic.Good=request.POST['choice']
pic.save()
return HttpResponseRedirect(reverse('pictures:pic', args=[pic.id]))
except (KeyError, Pic.DoesNotExist):
return render(request, 'pictures/single_picture.html', {'Pic': pic, 'error_message': 'uhhhh...',
})
修改1
关于NoReverseMatch错误,您使用的是url namespaces(&#39;图片:图片&#39;)。我对它不太熟悉,但我想 reverse 函数在url配置中使用 name =&#39; pic&#39; 查找视图对于图片应用。
您确定,您的网址配置文件中存在此类视图吗?
答案 1 :(得分:-1)
不是你问题的答案,但一个好的建议是替换它:
<form action="" method="POST">
{% csrf_token %}
{% if Pic.Good %}
<input type="submit" name="choice" id="{{ Pic.id }}" value="False" />
{% else %}
<input type="submit" name="choice" id="{{ Pic.id }}" value="True" />
{% endif %}
</form>
用这个:
<form action="" method="POST">
{% csrf_token %}
<input type="submit" name="choice" id="{{ Pic.id }}" value={% if Pic.Good %}"True"{% else %} "False" {% endif %} />
</form>