Кто-нибудь знает, есть ли правильный способ удалить этикетки в хрустящей форме?
Я дошел до этого:
self.fields['field'].label = ""
Но это не очень красивое решение.
Кто-нибудь знает, есть ли правильный способ удалить этикетки в хрустящей форме?
Я дошел до этого:
self.fields['field'].label = ""
Но это не очень красивое решение.
Вы можете отредактировать шаблон field.html
: https://github.com/maraujop/django-crispy-forms/blob/dev/crispy_forms/templates/bootstrap/field.html#L7
Добавьте в форму атрибут FormHelper
, который управляет отображением метки, и используйте его в этом шаблоне if
. Пользовательские атрибуты FormHelper
еще официально не задокументированы, потому что у меня не было времени, но я говорил о них в своем выступлении, вот слайды: https://speakerdeck.com/u/maraujop/p/django-crispy-forms
Просто делать:
self.helper.form_show_labels = False
Чтобы удалить все ярлыки.
self.fields['MYFIELD'].label = False
чтобы отключить для определенного поля
- person Yannic Hamann; 20.04.2018
form_show_labels = False
, так и переопределить конкретное поле с помощью self.fields['validation_CGU'].label = True
, и это не сработало, похоже, глобальное правило имеет приоритет, очень плохо
- person Vadorequest; 10.10.2018
Работает с Boostrap ( см. документацию)
В вашей форме:
from crispy_forms.helper import FormHelper
from django import forms
class MyForm(forms.Form):
[...]
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_show_labels = False
В вашем шаблоне:
<form method='POST' action=''>{% csrf_token %}
{% crispy form %}
<input type='submit' value='Submit' class='btn btn-default'>
</form>
если вы хотите удалить только некоторые метки из ввода, то явно не указывайте имя метки в определении модели, т.е.:
field = models.IntegerField("",null=True)
Приведенное ниже решение позволяет удалить этикетку как с обычного, так и с хрустящего элемента управления. Не только текст метки исчезает, но и пространство, используемое меткой, также удаляется, поэтому вы не получите пустую метку, занимающую место и искажающую макет.
Код ниже работает в django 2.1.1.
# this class would go in forms.py
class SectionForm(forms.ModelForm):
# add a custom field for calculation if desired
txt01 = forms.CharField(required=False)
def __init__(self, *args, **kwargs):
''' remove any labels here if desired
'''
super(SectionForm, self).__init__(*args, **kwargs)
# remove the label of a non-linked/calculated field (txt01 added at top of form)
self.fields['txt01'].label = ''
# you can also remove labels of built-in model properties
self.fields['name'].label = ''
class Meta:
model = Section
fields = "__all__"
Я не понимаю, в чем проблема у ОП с фрагментом кода, который он показал, за исключением того, что он не поместил строку кода в нужное место. Это кажется лучшим и самым простым решением.
Чтобы удалить все ярлыки:
self.helper.form_show_labels = False
Чтобы показать конкретную метку когда все False:
HTML('<span>Your Label</span>')
Чтобы отключить метку для определенного поля, когда все верно
self.fields['fieldName'].label = True
Пример:
Row(
HTML('<span> Upolad Government ID (Adhar/PAN/Driving Licence)</span>'),
Column('IdProof',css_class='form-group col-md-12 mb-0'),
css_class='form-row'
),