繁体   English   中英

Django:如何在内联模型表单集中默认情况下使字段不可编辑?

[英]Django: How do I make fields non-editable by default in an inline model formset?

我有一个内联模型表单集,如果这些字段在页面加载时已经有值,我想让这些字段不可编辑。 如果用户单击该行上的“编辑”按钮,它将变为可编辑并且(使用 JavaScript)我会将原始小部件替换为可编辑的小部件。 我想在加载页面时做这样的事情:

for field in form.fields:
    if field.value:
        # display as text
    else:
        # display as my standard editable widget for this field

我看到inlineformset_factory有一个名为formfield_callback的参数。 我怀疑这可能很有用,但因为我还没有找到任何文档。 谁能给我指出一些有用的文档,以及它如何帮助我解决这个问题?

这个也让我有点难受。 希望这就是你正在寻找的。

<TABLE>
    <form method="post" action=".">
        {{ formset.management_form }}
        {% for form in formset.forms %}
            {{ form.id }}
            <tr>
                <td>{{ form.FirstName }}</td> <!-- This is a normal, editable field -->
                <td>{{ form.instance.LastName }}</td> <!-- 'instance' is your actual Django model. LastName displays the text from the last name field -->
            </tr>
        {% endfor %}
    </form>
</TABLE>

这个线程有点旧,但对于任何正在寻找的人:

形式:

myfield=forms.CharField( widget=forms.TextInput(attrs={'class':'disabled', 'readonly':'readonly'}))

“只读”是一个 HTML 属性,它使表单不可编辑。 “禁用”是一个 CSS 类,因为您需要修改默认样式,它还使 jQuery 更简单。

要在单击时使只读输入可编辑,这是一个 jQuery 示例:

$('input.disabled').click(function(){
    $(this).removeAttr('readonly').removeClass('disabled');
});

我认为您可以覆盖表单集中使用的表单的 init 函数。 在那里您可以检查initial_data,并像您希望的那样动态构建表单。 至少,这在我的脑海中听起来似乎是合理的。

我有一个问题,我想“ 自动生成表单字段”,可以找到动态创建表单的解决方案,它可能会有所帮助:

在 Django 中为表单自动生成表单字段

它不干净,可能有更好的方法来处理这个问题。

如何从 django 将数据作为可编辑(正常表单集)发送并使用 javascript 进行值检查,使用 javascript 切换小部件?

form.instance.LastName 将显示值,form.initial.LastName 将显示主键。

暂无
暂无

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

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