Python Django使用表单更新模型条目失败
我想使用表单更新模型条目。问题是它没有更新条目,而是创建了一个新条目Python Django使用表单更新模型条目失败,python,django,forms,Python,Django,Forms,我想使用表单更新模型条目。问题是它没有更新条目,而是创建了一个新条目 def edit(request, c_id): instance = get_object_or_404(C, id=int(c_id)) if request.POST: form = CForm(request.POST, instance=instance) if form.is_valid(): form.save()
def edit(request, c_id):
instance = get_object_or_404(C, id=int(c_id))
if request.POST:
form = CForm(request.POST, instance=instance)
if form.is_valid():
form.save()
return redirect('/a/b', c_id)
else:
form = CForm(instance=instance)
args = {}
args.update(csrf(request))
args['form'] = form
args['c_id'] = c_id
return render_to_response('a/b.html', args)
HTML代码:
<form action="/a/edit/{{ c_id }}/" method="post">
{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
{% if field.help_text %}
<p class="help">{{ field.help_text|safe }}</p>
{% endif %}
</div>
{% endfor %}
<input type="submit" value="Submit"/>
</form>
您正在错误地检查
POST
方法的请求。它不是一个布尔值,它包含一个post变量字典,并且总是包含CSRF标记,所以它总是“truthy”。你需要的是
而不是:
if request.POST:
替换为:
if request.method == "POST":
您正在错误地检查
POST
方法的请求。它不是一个布尔值,它包含一个post变量字典,并且总是包含CSRF标记,所以它总是“truthy”。你需要的是
而不是:
if request.POST:
替换为:
if request.method == "POST":
请用您用来呈现表单的html更新您的问题。@Soviut我已经更新了it@Alasdair我现在已经添加了CForm类,我认为您可能通过使用像
CForm
这样的组合变量来隐藏问题-我不认为您发布的代码会创建新实例。我唯一能想到的另一件事是post请求由create视图而不是edit视图处理。你还没有发布你的URL模式,所以我不知道情况是否如此。您可以添加一些打印/日志记录,以确保调用了正确的视图。@Alasdair您是对的。有人提出了错误的观点。谢谢。请用您用来呈现表单的html更新您的问题。@Soviut我已经更新了it@Alasdair我现在已经添加了CForm类,我认为您可能通过使用像CForm
这样的组合变量来隐藏问题-我不认为您发布的代码会创建新实例。我唯一能想到的另一件事是post请求由create视图而不是edit视图处理。你还没有发布你的URL模式,所以我不知道情况是否如此。您可以添加一些打印/日志记录,以确保调用了正确的视图。@Alasdair您是对的。有人提出了错误的观点。谢谢,还是不行。它只是在数据库中添加了另一个条目,但仍然不起作用。它只是在数据库中添加了另一个条目