Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django使用表单更新模型条目失败_Python_Django_Forms - Fatal编程技术网

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您是对的。有人提出了错误的观点。谢谢,还是不行。它只是在数据库中添加了另一个条目,但仍然不起作用。它只是在数据库中添加了另一个条目