#django #django-models #django-forms #django-templates #django-views
#django #django-модели #django-forms #django-шаблоны #django-представления
Вопрос:
У меня есть ModelForm, MyForm. Помогите мне написать метод, который возвращает html-элементы для каждого поля, присутствующего в форме.
class MyForm(forms.ModelForm):
priority = forms.ChoiceField(
widget=forms.Select(attrs={'class': 'form-control','data-role':'select'}),
choices=((1,1), (2,2), (3,3), (4,4)),
required=True,
initial='3',
label=_('Priority'),
help_text=_("Please select a priority carefully. If unsure, leave it as '3'."),
)
due_date = forms.DateTimeField(
widget=forms.TextInput(attrs={'class': 'form-control','data-role':'datepicker'}),
required=False,
)
def getFormHtml(self):
#need to return a dictionary with the key being the form field name and value being the HTML tag for the respective element
Комментарии:
1. Вы читали официальные документы ? Это стандартная функциональность Django
Form
.
Ответ №1:
my_form = MyForm()
в django есть встроенный способ отображения формы. Вы также можете получить отображение формы по умолчанию в виде, подобном этому:
my_form.as_p()
или
myform_as_table()
таким образом, вы могли бы расширить свой объект MyForm, чтобы иметь метод, который возвращает форму в виде html из данного экземпляра формы:
class MyForm(forms.ModelForm):
priority = forms.ChoiceField(
widget=forms.Select(attrs={'class': 'form-control','data-role':'select'}),
choices=((1,1), (2,2), (3,3), (4,4)),
required=True,
initial='3',
label=_('Priority'),
help_text=_("Please select a priority carefully. If unsure, leave it as '3'."),
)
due_date = forms.DateTimeField(
widget=forms.TextInput(attrs={'class': 'form-control','data-role':'datepicker'}),
required=False,
)
def getFormHtml(self):
return self.as_table()
конечно, это имело бы смысл, только если вам нужен html формы в другом представлении. Если вам нужен html формы в шаблоне, вы можете получить форму в шаблоне, добавив ее {{my_form.as_table}}
в шаблон или отрисовав поля формы вручную в шаблоне
Комментарии:
1. Спасибо! Я ожидаю словарь, ключом которого является имя поля формы, а значением — HTML-тег для соответствующего элемента. Возможно ли это?
2. вам нужны эти значения в представлении или шаблоне?
Ответ №2:
После отправки вы получаете значения полей, используя атрибут ‘name’ элемента. Вы могли бы получить метод form (post / get), но html-тег не попадет в представление.