Как скрыть метку поля для виджета HiddenInput в Django Admin?

У меня есть код формы Django, который выглядит так:

class GalleryAdminForm(forms.ModelForm): auto_id=False order = forms.CharField(widget=forms.HiddenInput()) 

И это заставляет поле формы уйти, но оно оставляет надпись «Заказ» на странице администрирования Django. Если я использую:

 order = forms.CharField(widget=forms.HiddenInput(), label='') 

Мне все еще остается «:» между тем, где раньше было поле и метка.

Как скрыть все!

9 Solutions collect form web for “Как скрыть метку поля для виджета HiddenInput в Django Admin?”

Если вы используете JQuery, это должно сделать трюк:

Ваша форма

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

Код Javascript для добавления в шаблон

 $(document).ready(function(){ $('tr:has(.hidden)').hide(); }); 

Это работает, если вы создаете форму в виде таблицы. Если вы хотите, чтобы он работал с любым видом рендеринга формы, вы можете сделать следующее:

 $(document).ready(function(){ $('{{ form_field_container }}:has(.hidden)').hide(); }); 

И добавьте form_field_container в контекст вашего шаблона. Пример:

Если вы сделаете свою форму следующим образом:

  <form> <span>{{ field.label_tag }} {{ field }}</span> </form> 

Ваш контекст должен включать:

 'form_field_container': 'span' 

Вы получаете идею …

У Оракулума все правильно. Вы не должны чистить это на стороне клиента. Если это беспорядок, вы не должны отправлять его клиенту. Основываясь на ответе 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 %} 

Использование шаблона пользовательской формы для управления скрытыми полями является более чистым, потому что он не передает посторонней информации клиенту.

Я не могу поверить, что некоторые люди предложили использовать jQuery для этого …

Это случай: когда единственным инструментом, который вы знаете, является молоток, все выглядит как гвоздь?

Пойдем, если вы собираетесь делать это с клиентской стороны (вместо того, чтобы исправить исходный код проблемы во внутреннем коде), безусловно, подходящее место для этого было бы в CSS?

Если вы находитесь в админ-сайте, это немного сложнее, но если это обычная страница, то легко просто опустить целую метку из шаблона формы, например

Если вы находитесь на админ-сайте, вы все равно можете переопределить as_table, as_ul, as_p методы BaseForm (см. Django / forms / forms.py) в вашем классе GalleryAdminForm, чтобы опустить метку любого поля, где ярлык пуст (или == ':' поскольку значение может быть на данном этапе рендеринга)

(… глядя на строки 160-170 форм.py кажется, что Django 1.2 должным образом опускает символ «:», если метка пуста, поэтому, я думаю, вы используете более старую версию?)

Пытаться

{% для поля в form.visible_fields%}

Я думаю, что проще пропустить ярлык «:» для виджета HiddenInput, изменив class AdminField(object) в contrib/admin/helpers.py из:

  if self.is_checkbox: classes.append(u'vCheckboxLabel') contents = force_unicode(escape(self.field.label)) else: contents = force_unicode(escape(self.field.label)) + u':' 

к:

  if self.is_checkbox: classes.append(u'vCheckboxLabel') contents = force_unicode(escape(self.field.label)) else: contents = force_unicode(escape(self.field.label)) #MODIFIED 26/10/2009 if self.field.label <> '': contents += u':' # END MODIFY 

Проверьте ответ в поле Создать скрытое поле на сайте администратора , это можно сделать без JavaScript, переопределив admin/includes/fieldset.html Там вы можете ввести класс CSS и сделать все остальное.

Теоретически вы можете передать label_suffix в конструктор формы. Однако администратор Django игнорирует это.

Вы были укушены двумя ошибками в Django: # 18134 «BoundField.label_tag должен включать form.label_suffix» (исправлено в trunk, должно быть в 1.6) и в меньшей степени # 11277 Скрытые поля в Inlines отображаются как пустые строки .

В настоящее время лучшим решением является переопределение шаблона поля field admin. Используйте HiddenInput для вашего виджета, а затем переопределите шаблон HiddenInput admin ( описанный здесь ). Просто создайте templates/admin/includes/fieldset.html со следующим содержимым:

 <fieldset class="module aligned {{ fieldset.classes }}"> {% if fieldset.name %}<h2>{{ fieldset.name }}</h2>{% endif %} {% if fieldset.description %} <div class="description">{{ fieldset.description|safe }}</div> {% endif %} {% for line in fieldset %} <div class="form-row{% if line.fields|length_is:'1' and line.errors %} errors{% endif %}{% for field in line %}{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% endfor %}"> {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %} {% for field in line %} <div{% if not line.fields|length_is:'1' %} class="field-box{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}"{% endif %}> {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %} {% if field.is_checkbox %} {{ field.field }}{{ field.label_tag }} {% else %} {# only show the label for visible fields #} {% if not field.field.is_hidden %} {{ field.label_tag }} {% endif %} {% if field.is_readonly %} <p>{{ field.contents }}</p> {% else %} {{ field.field }} {% endif %} {% endif %} {% if field.field.help_text %} <p class="help">{{ field.field.help_text|safe }}</p> {% endif %} </div> {% endfor %} </div> {% endfor %} </fieldset> 

Основываясь на решении Wilfried Hughes, я изменил файл fieldset.html с небольшими улучшениями.

Фрагмент кода ниже не только скрывает элемент ввода вместо этого, если в наборе полей содержится только один элемент, тип ввода-типа которого скрыт, он также скрывает окружающие div-элементы, не теряющие пробела в форме.

 <fieldset class="module aligned {{ fieldset.classes }}"> {% if fieldset.name %}<h2>{{ fieldset.name }}</h2>{% endif %} {% if fieldset.description %} <div class="description">{{ fieldset.description|safe }}</div> {% endif %} {% for line in fieldset %} <div class="form-row{% if line.fields|length_is:'1' and line.errors %} errors{% endif %}{% for field in line %}{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% endfor %}"{% if line.fields|length_is:'1' %}{% for field in line %}{% if field.field.is_hidden %} style="display: none"{% endif %}{% endfor %}{% endif %}> {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %} {% for field in line %} <div{% if not line.fields|length_is:'1' %} class="field-box{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}"{% endif %}{% if field.field.is_hidden %} style="display: none"{% endif %}> {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %} {% if field.is_checkbox %} {{ field.field }}{{ field.label_tag }} {% else %} {# only show the label for visible fields #} {% if not field.field.is_hidden %} {{ field.label_tag }} {% endif %} {% if field.is_readonly %} <p>{{ field.contents }}</p> {% else %} {{ field.field }} {% endif %} {% endif %} {% if field.field.help_text %} <p class="help">{{ field.field.help_text|safe }}</p> {% endif %} </div> {% endfor %} </div> {% endfor %} 

Следующее удаляет ':' из всех полей формы. Я только пробовал это с forms.Form класса forms.Form , но я считаю, что он должен работать и для forms.ModelForm тоже.

В формах Django «:» после ярлыков – label_suffix . Вы можете изменить или удалить label_suffix путем создания подкласса ModelForm , называемого UnstyledForm , и переопределения функции инициализации с установкой label_suffix в пустую строку. Затем используйте новый класс UnstyledForm .

 class UnstyledForm(forms.ModelForm): def __init__(self, *args, **kwargs): kwargs.setdefault('label_suffix', '') super(UnstyledForm, self).__init__(*args, **kwargs) class GalleryAdminForm(UnstyledForm): auto_id=False order = forms.CharField(widget=forms.HiddenInput()) 

Надеюсь, это поможет!

  • Изображения в викторине
  • Django - выбор лимита для чего-то, что зависит от экземпляра
  • принуждение к Unicode: нужна строка или буфер, NoneType найден при рендеринге в django admin
  • два класса администратора для одной модели django
  • Только производство: иногда получается 403 проверка CSRF
  • Django 1.7 где поставить код для добавления групп программно?
  • Как автоматически создать симметричный объект на многопользовательском поле Django?
  • django - установка прав пользователя при автоматическом создании пользователя
  • Python - лучший язык программирования в мире.