Django - Разделение модельной формы на секции
Я делаю приложение для управления недвижимостью, в котором пользователь может заполнить заявку на аренду. Я ищу способ разделить мою форму на секции, например
Персональная информация: пункт пункт пункт пункт История аренды: пункт пункт пункт пункт Трудоустройство пункт пункт пункт
Моя форма
class ApplicantForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ApplicantForm, self).__init__(*args, **kwargs)
self.fields['property'].queryset = Properties.objects.filter(is_active=True)
class Meta:
model = Applicant
fields = '__all__'
exclude = ['application_date']
widgets = {
'requested_move_in_date': DateInput(),
'dob': DateInput(),
'job_length': DateInput(),
}
labels = {
'requested_move_in_date': 'Requested Move in Date',
'dob': 'Date of Birth',
'ssn': "Social Security Number",
'job_length': "Job Start Date"
}
Мой шаблон
{% load crispy_forms_tags %}
{% block content %}
<div class="jumbotron text-center">
Application page
</div>
<form class="post-form" method="POST">
{% csrf_token %}
{{ form|crispy }}
<button type="submit" class="save btn btn-primary">Submit</button>
</form>
{% endblock %}
Вы можете использовать FormHelper()
из django-crispy-forms для переопределения макета вашей формы. Это просто пример, но вы можете изменить его для своих целей, чтобы сделать секции:
from crispy_forms.helper import FormHelper
class ApplicantForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.layout = Layout(
Row(
Div('requested_move_in_date', css_class='col-12 col-md-4'),
Div('dob', css_class='col-12 col-md-4'),
Div('job_length', css_class='col-12 col-md-4'),
),
ButtonHolder(
Submit('submit', 'Сохранить'), css_class='form-btn-holder'
)
)
super(ApplicantForm, self).__init__(*args, **kwargs)
self.fields['property'].queryset = Properties.objects.filter(is_active=True)
class Meta:
model = Applicant
fields = '__all__'
exclude = ['application_date']
widgets = {
'requested_move_in_date': DateInput(),
'dob': DateInput(),
'job_length': DateInput(),
}
labels = {
'requested_move_in_date': 'Requested Move in Date',
'dob': 'Date of Birth',
'ssn': "Social Security Number",
'job_length': "Job Start Date"
}