【问题标题】:How to create a populated form for editing in Django如何在 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,当它可用于表单时添加对象内容?或者,我是否需要使用明确描述的值重新创建编辑表单?

谢谢!

【问题讨论】:

    标签: django django-forms django-templates


    【解决方案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 中,我如何访问该实例?我在想我只需要编写一个自定义编辑模板。
    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 2015-08-26
    • 2018-12-12
    • 1970-01-01
    • 2012-09-17
    • 2020-12-25
    • 2022-11-28
    • 2019-12-10
    相关资源
    最近更新 更多