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"
        }
Вернуться на верх