如何在 Django 中创建用于编辑的填充表单

Posted

技术标签:

【中文标题】如何在 Django 中创建用于编辑的填充表单【英文标题】:How to create a populated form for editing in Django 【发布时间】:2012-06-02 01:27:30 【问题描述】:

我有一个表单,我想用对象自动填充以进行编辑。

我的表单sn-p如下:

% for field in form %
    <div class="form_block">
         field.label_tag 
        % if field.help_text %
            <p class="help_text"> field.help_text </p>
        % endif %
         field 
        % for error in field.errors %
            <p class="error"> error </p>
        % endfor %
    </div>
% endfor %

有没有一种简单的方法来创建像这样的 sn-p,当它可用于表单时添加对象内容?或者,我是否需要使用明确描述的值重新创建编辑表单?

谢谢!

【问题讨论】:

【参考方案1】:

使用initialModelForm

>>> from django import forms
>>> from django.contrib.auth.models import *

>>> class UserForm(forms.Form):
>>>     username = forms.CharField()
>>> print unicode(UserForm(initial='username':'foo'))
<tr><th><label for="id_username">Username:</label></th><td><input type="text" name="username" value="foo" id="id_username" /></td></tr>


>>> class UserModelForm(forms.ModelForm):
>>>     class Meta:
>>>         model = User
>>>         fields = ['username']
>>> print unicode(UserModelForm(instance=User(username='foo')))
<tr><th><label for="id_username">Username:</label></th><td><input id="id_username" type="text" name="username" value="foo" maxlength="30" /><br /><span class="helptext">Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters</span></td></tr>

【讨论】:

第二个选项要好得多,尤其是因为这意味着您可以在之后调用 save。 这看起来很接近,但是当我在编辑视图中调用 instance 时,我将如何处理 db 对象呢? 现在我想这行不通。表单不知道我想要的 DB 中有什么记录。 @DaveMerwin 只需将要填充的模型实例传递给实例参数。 我这样做。但是在 sn-p 中,我如何访问该实例?我在想我只需要编写一个自定义编辑模板。

以上是关于如何在 Django 中创建用于编辑的填充表单的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 TemplateHTMLRenderer 在 Django-REST-Framework 中创建/放置?

如何在vue.js中创建用于创建和编辑功能的简单模式?

如何在 django 中创建表单和模型中使用的字段的单选按钮

如何自动填充表单框值填充另一个?

一个Django插件,用于在Bootstrap模式中创建AJAX驱动的表单。

如何在 Django 中创建一个分为两部分的注册表单,这样一个电话只有在电子邮件验证后才能填写第二部分?