[英]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 将数据作为可编辑(正常表单集)发送并使用 javascript 进行值检查,使用 javascript 切换小部件?
form.instance.LastName 将显示值,form.initial.LastName 将显示主键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.