如何在管理站点中创建完全隐藏的字段(输入和标签)?
我知道exclude
属性,但它完全排除了模板中的字段,而我在网页中需要它,但隐藏了:
class OutForm(ModelForm):
reply_to = forms.ModelChoiceField(queryset=InMessages.objects.all(), widget=forms.HiddenInput)
在管理员模板中,我实际上可以隐藏字段,但不能隐藏其标签。
答案 0 :(得分:14)
Django管理员还不支持隐藏字段。有一张开放的门票:https://code.djangoproject.com/ticket/11277
但是,有些解决方法不需要jQuery。管理表单使用admin/includes/fieldset.html
呈现。如果覆盖此模板,则可以注入一个CSS类来表示要隐藏的行:
<div class="form-row
{% if line.fields|length_is:'1' and line.errors %} errors{% endif %}
{% for field in line %} {{ field.field.name }}
{% if field.field.is_hidden %} has-hidden-field{% endif %} # add this part
{% endfor %}">
这实际上是文件中的一行,我已经扩展它以使其更具可读性。
(整洁的细节:对于StackedInline / TabularInline对象,您可以在Python代码中将模板指定为变量。)
接下来,您可以在CSS中隐藏该行:
.form-row.has-hidden-field {
display: none;
}
您可以通过管理页面加载:
{% block extrastyle %}{{ block.super }}
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}mysite/admin.css" />{% endblock %}
或使用modeladmin中的媒体定义:
class Media:
css = {'all': ('mysite/admin.css',)
答案 1 :(得分:2)
在模板中,显示
{% for field in form.visible_fields %}
{{ field.label_tag }} : {{ field }}
{% endfor %}
它会隐藏隐藏的字段标签。
答案 2 :(得分:1)
我觉得使用&#39;课程非常方便。字段集中的属性可隐藏字段但仍将它们保留在请求中。在您的模型管理员中,您可以编写
fieldsets = [
('Visible Fields',
{'fields': [('name', 'comment'),]}),
('Collapsable Fields',
{'fields': [('rare_property',)],'classes': ['collapse']}),
('Hidden Fields',
{'fields': [('magic_property',)],'classes': ['hidden']}),
]
答案 3 :(得分:0)
你在你的例子中给出ModelForm,而不是你应该用于管理站点的ModelAdmin。
无论如何,排除某些字段的方法是相同的:在exclude
属性中指定它:
class OutForm(ModelForm):
class Meta:
exclude = ["reply_to"]
或
class OutAdmin(ModelAdmin):
exclude = ["reply_to"]
有关详细信息,请参阅Django文档:http://docs.djangoproject.com/en/1.2/ref/contrib/admin/
答案 4 :(得分:0)
尝试将label =“”添加到ModelChoiceField,使标签成为空字符串:
reply_to = forms.ModelChoiceField(queryset=InMessages.objects.all(), label="", widget=forms.HiddenInput)