Наборы форм

inlineformset_factory

django.forms.models.inlineformset_factory(**kwargs)

Фабрика набора форм для дочерних моделей модели

  • parent_model - родительская модель

  • model - дочерняя модель, по которой формируется набор форм

  • form - класс формы, которая будет использоватся для ввода данных. По умолчанию django.forms.models.ModelForm

  • formset - =BaseInlineFormSet,

  • fk_name - =None,

  • fields - список полей модели, которые будут в одной форме

  • exclude - список полей модели, которые не будут в одной форме

  • extra - максимальное количество выводимых пустых форм для создания новых записей, по умолчанию 3

  • can_order - булево, пользователь может сортировать записи

  • can_delete - булево, пользователь может удалить записи

  • max_num - максимальное количество форм в наборе, по умолчанию 1000

  • formfield_callback - =None,

  • widgets - =None,

  • validate_max - булево, количество форм в наборе не должно быть больше max_num

  • localized_fields - =None,

  • labels - словарь, полей форм, с надписями

  • help_texts - словарь, полей форм, с дополнительным текстом

  • error_messages - словарь, полей форм с текстом сообщений

  • min_num - =None,

  • validate_min - =False

# formset.py

from django.forms.models import inlineformset_factory
from .models import SomeModel, ParentModel

SomeFormSet = inlineformset_factory(ParentModel, SomeModel)
# views.py

def some_view(request):

    instance = ParentModel.objects.get()
    formset = SomeFormSet(instance=instance)

    if formset.is_valid():
        formset.save()

modelformset_factory

django.forms.models.modelformset_factory(**kwargs)

Фабрика набора форм для модели

  • model - модель, по которой формируется набор форм

  • form - класс формы, которая будет использоватся для ввода данных. По умолчанию django.forms.models.ModelForm

  • formfield_callback - =None,

  • formset - =BaseModelFormSet,

  • extra - максимальное количество выводимых пустых форм для создания новых записей, по умолчанию 1

  • can_delete - булево, пользователь может удалить записи

  • can_order - булево, пользователь может сортировать записи

  • max_num - максимальное количество форм в наборе, по умолчанию 1000

  • fields - список полей модели, которые будут в одной форме

  • exclude - список полей модели, которые не будут в одной форме

  • widgets - =None,

  • validate_max - булево, количество форм в наборе не должно быть больше max_num

  • localized_fields - =None,

  • labels - словарь, полей форм, с надписями

  • help_texts - словарь, полей форм, с дополнительным текстом

  • error_messages - словарь, полей форм с текстом сообщений

  • min_num - =None,

  • validate_min - =False

# formset.py

from django.forms.models import modelformset_factory
from .models import SomeModel

SomeFormSet = modelformset_factory(SomeModel)

formset = SomeFormSet(queryset=SomeModel.objects.all())
# views.py

def some_view(request):

    formset = SomeFormSet(request.POST, request.FILES)

    if formset.is_valid():
        formset.save()
<form>
    {{ formset.as_p }}
    {{ formset.can_order }}
    {{ formset.can_delete }}
</form>
<form>
    {{ formset.management_form }}
    {% for form in formset %}
        {{ form.as_p }}
        {{ form.ORDER }}
        {{ form.DELETE }}
    {% endfor %}
</form>