繁体   English   中英

如何在django模板中预填充ModelForm

[英]How to prepopulate a ModelForm in the django template

我是Django的新手。 我正在尝试在'example.com/contacts/10/edit'创建一个表单,它允许您编辑联系人的详细信息,然后将您带到该联系人的详细信息页面(example.com/contacts/10)。 在这些情况下,10是默认的pk。

我成功地显示了一个在数据库中编辑联系人的表单,但是表单在模板中是空的,我无法弄清楚如何使用数据库中的数据填充表单。

我正在使用的ModelForm - AddForm() - 与我用来添加新联系人的模型相同

这是我的代码,这里可能有一些多余的东西所以请耐心等待。 所有帮助表示赞赏。

views.py

def EditContact(request, pk):
    instance = get_object_or_404(Contact, id=pk)
    if request.POST:
        form = AddForm(request.POST or None, instance=instance)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/contacts/')

    else:
        form = AddForm()

    return render(request, 'contacts/edit.html', {'form': form})

模板中的表单:

<form action="" method="POST"> {% csrf_token %}
    <table>

            <p> {{ form.as_ul }}</p>

    </table>

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

我最近也读过有关通用编辑视图的内容,也许有人可以告诉我它们是否更适合我想要实现的目标 - 即添加,编辑和删除数据库中的联系人。 谢谢。

您已经在request.POST块中执行此操作。

您还必须在else块中发送instance参数

def EditContact(request, pk):
    instance = get_object_or_404(Contact, id=pk)
    if request.method == 'POST': #It is better to explicitly check for method instead of the dictionary
        form = AddForm(request.POST, instance=instance) #No need of the 

如果form.is_valid():form.save()返回HttpResponseRedirect('/ contacts /'),则为“或无”
else:form = AddForm(instance = instance)#Here是更改

    return render(request, 'contacts/edit.html', {'form': form})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM