在管理站点中创建隐藏字段

gig*_*mon 10 django django-admin

如何在管理站点中创建完全隐藏的字段(输入和标签)?我知道该exclude属性,但它完全排除了模板中的字段,而我在网页中需要它,但隐藏:

class OutForm(ModelForm):
    reply_to = forms.ModelChoiceField(queryset=InMessages.objects.all(), widget=forms.HiddenInput)
Run Code Online (Sandbox Code Playgroud)

在管理员模板中,我实际上可以隐藏字段,但不能隐藏其标签.

vdb*_*oor 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 %}">
Run Code Online (Sandbox Code Playgroud)

这实际上是文件中的一行,我已经扩展它以使其更具可读性.

(整洁的细节:对于StackedInline/TabularInline对象,您可以在Python代码中将模板指定为变量.)

接下来,您可以在CSS中隐藏该行:

.form-row.has-hidden-field {
    display: none;
}
Run Code Online (Sandbox Code Playgroud)

您可以通过管理页面加载:

{% block extrastyle %}{{ block.super }}
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}mysite/admin.css" />{% endblock %}
Run Code Online (Sandbox Code Playgroud)

或者使用modeladmin中的媒体定义:

class Media:
    css = {'all': ('mysite/admin.css',)
Run Code Online (Sandbox Code Playgroud)


Ale*_*dev 0

您在示例中给出的是 ModelForm,而不是您应该用于管理站点的 ModelAdmin。

无论如何,排除某些字段的方法是相同的:在exclude属性中指定它:

class OutForm(ModelForm):
  class Meta:
    exclude = ["reply_to"]
Run Code Online (Sandbox Code Playgroud)

或者

class OutAdmin(ModelAdmin):
  exclude = ["reply_to"]
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅 Django 文档:http://docs.djangoproject.com/en/1.2/ref/contrib/admin/

  • 不,你可能不理解我。方法排除不创建隐藏字段,它将其从表单中排除并且不在输出页面中显示它(在模板中) (8认同)