在Django上编辑视图不将对象显示到页面中

时间:2018-01-18 02:18:22

标签: python django

我有一个表单页面可以从数据库中编辑我的对象,但是当我使用编辑按钮访问它们时,它会转到URL http://localhost:8000/acoes/edit/1,但我无法在表单字段中看到对象详细信息。它只是空的,好像我要创建一个新对象(如果我尝试它会创建)

有什么建议吗?我在网上发现的每个帖子和问题都表明代码可以像这样工作,但它不是。

在模板acoes_form.html

EOF

on views.py

<form method="post">

    <div class="form-group">
        {% csrf_token %}
        {{form.as_p}}
    </div>
    <input type="submit" value="Gravar dados" class="btn btn-success" /> 
</form>

on forms.py

@login_required(login_url="/login")
def acoes_edit(request, pk, template_name='acoes/acoes_form.html'):
    if request.user.is_superuser:
        acoes= get_object_or_404(Acoes, pk=pk)
    else:
        acoes= get_object_or_404(Acoes, pk=pk, user=request.user)
    form = AcoesForm(request.POST or None, instance=acoes)
    if form.is_valid():
        form.save()
        return redirect('acoes_list')
    return render(request, template_name, {'form':AcoesForm})

2 个答案:

答案 0 :(得分:1)

按如下方式更改您的观点:

@login_required(login_url="/login")
def acoes_edit(request, pk, template_name='acoes/acoes_form.html'):
    if request.user.is_superuser:
        acoes= get_object_or_404(Acoes, pk=pk)
    else:
        acoes= get_object_or_404(Acoes, pk=pk, user=request.user)
    form = AcoesForm(request.POST or None, instance=acoes)
    if form.is_valid():
        form.save()
        return redirect('acoes_list')
    return render(request, template_name, {'form': form})

您不小心引用了表单类而不是表单实例。

在旁注中,如果此人将数据发布到视图,您可能只想保存表单,例如

@login_required(login_url="/login")
def acoes_edit(request, pk, template_name='acoes/acoes_form.html'):
    if request.user.is_superuser:
        acoes= get_object_or_404(Acoes, pk=pk)
    else:
        acoes= get_object_or_404(Acoes, pk=pk, user=request.user)
    form = AcoesForm(request.POST or None, instance=acoes)
    if request.method == 'POST' and form.is_valid():
        form.save()
        return redirect('acoes_list')
    return render(request, template_name, {'form': form})

答案 1 :(得分:1)

错误在最后一行,您传递的是表单类而不是表单对象。

return render(request, template_name, {'form':form})