【问题标题】:How to prepopulate a ModelForm in the django template如何在 django 模板中预填充 ModelForm
【发布时间】:2015-12-27 00:53:30
【问题描述】:

我是 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>

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

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    您已经在 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 "or None" here
            if form.is_valid():
                form.save()
                return HttpResponseRedirect('/contacts/')    
        else:
            form = AddForm(instance=instance) #Here is the change
    
        return render(request, 'contacts/edit.html', {'form': form})
    

    【讨论】:

    • 你应该放弃or None:你在request.POST,不可能是None。
    猜你喜欢
    • 2019-04-04
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    相关资源
    最近更新 更多