如何在Django Admin中隐藏HiddenInput小部件的字段标签?

Gab*_*ley 17 python django django-admin

我有一些看起来像这样的Django表单代码:

class GalleryAdminForm(forms.ModelForm):
    auto_id=False
    order = forms.CharField(widget=forms.HiddenInput())
Run Code Online (Sandbox Code Playgroud)

这使得表单字段消失了,但它在Django管理页面中留下了标签"Order".如果我使用:

order = forms.CharField(widget=forms.HiddenInput(), label='')
Run Code Online (Sandbox Code Playgroud)

我仍然留下了字段和标签之间的":".

我如何隐藏整个事情?!

emi*_*der 39

Oraculum做对了.你不应该在客户端清理它.如果它是杂乱的,那么你根本不应该把它发送到客户端.在Oraculum的答案的基础上,您应该使用自定义表单模板,因为您可能仍然需要表单中的隐藏值.

{% for field in form.visible_fields %}
    <div>
        {{ field.errors }}
        <span class="filter-label">{{ field.label_tag }}</span><br>
        {{ field }}
    </div>
 {% endfor %}

 {% for field in form.hidden_fields %}
     <div style="display:none;">{{ field }}</div>
 {% endfor %}
Run Code Online (Sandbox Code Playgroud)

使用自定义表单模板来控制隐藏字段更加清晰,因为它不会向客户端发送无关信息.


Ane*_*pic 36

我不敢相信有几个人建议使用jQuery ...

这是一个案例:当你知道的唯一工具是锤子时,一切看起来像钉子?

来吧,如果你打算从客户端做到这一点(而不是在后端代码中解决问题的根源),肯定正确的地方是CSS吗?

如果你在管理站点然后它有点难,但如果它是一个常规页面,那么很容易从表单模板中省略整个标签,例如

如果您在管理站点中,那么您仍然可以覆盖GalleryAdminForm类中的BaseForm的as_table,as_ul,as_p方法(请参阅django/forms/forms.py),以省略标签为空白的任何字段的标签(或==':'因为值可能在此渲染阶段)

(...查看forms.py的 160-170行似乎Django 1.2应该正确省略':',如果标签是空白的,那么我猜你是旧版本的?)


小智 17

尝试

{%for form in form.visible_fields%}


Gui*_*ert -22

如果你使用 JQuery 这应该可以解决问题:

您的表格

TO_HIDE_ATTRS = {'class': 'hidden'}
class GalleryAdminForm(forms.ModelForm):
    auto_id=False
    order = forms.CharField(widget=forms.TextInput(attrs=TO_HIDE_ATTRS))
Run Code Online (Sandbox Code Playgroud)

添加到模板的 Javascript 代码

$(document).ready(function(){
    $('tr:has(.hidden)').hide();
});
Run Code Online (Sandbox Code Playgroud)

如果您将表单呈现为表格,则此方法有效。如果您想让它适用于任何类型的表单渲染,您可以执行以下操作:

$(document).ready(function(){
    $('{{ form_field_container }}:has(.hidden)').hide();
});
Run Code Online (Sandbox Code Playgroud)

并添加form_field_container到您的模板上下文中。一个例子:

如果您像这样呈现表单:

    <form>
        <span>{{ field.label_tag }} {{ field }}</span>
    </form>
Run Code Online (Sandbox Code Playgroud)

您的背景必须包括:

'form_field_container': 'span'
Run Code Online (Sandbox Code Playgroud)

你明白了...

  • 疯狂的..解决方案 - 就像向苍蝇开枪一样! (3认同)
  • 很抱歉投了反对票,但我同意,这是在错误的地方解决了这个问题。 (2认同)