Автоматическое именование связанных полей Django: изменение части формы

Я не могу найти, возможно ли это. Но, скажем, у меня есть форма:

class Detform(ModelForm):

    class Meta:
        model = Ap_detcmd
        fields = ["foo"]


Formset = inlineformset_factory(ParentModel, ChildModel,
                                       form=Detform,
                                       can_delete=False,
                                       extra=0)

Затем в шаблоне это отображается, например, в форме управления (или в любом поле):

<input type="hidden" name="ap_detcmd-TOTAL_FORMS" value="0" id="id_ap_detcmd-TOTAL_FORMS">

Поскольку модель формы - "Ap_detcmd", то я получаю #id_ap_detcmd-.... в качестве префикса для всех полей.

Есть ли способ указать этот префикс?

Хорошо, вкратце:

  • Подкласс BaseInlineFormset
  • добавьте {"prefix": "foo"} к kwargs в init & передайте это дальше
  • .
  • Magic

Например:

class MyBaseInlineFormset(BaseInlineFormSet):
    def __init__(self, *args, **kwargs):
        kwargs["prefix"] = "foo"
        super().__init__(*args, **kwargs)

Тогда ваше объявление inlineformset будет выглядеть так:

DetPoFormset = inlineformset_factory(Ap_entcmd, Ap_detcmd, form=Detform, formset=MyBaseInlineFormset, can_delete=True, extra=0)

Тогда вход вашей формы управления (id_XXX-TOTAL_FORMS и т.д.) будет выглядеть так:

<input type="hidden" name="foo-TOTAL_FORMS" value="0" id="id_foo-TOTAL_FORMS">

а также все теги в наборе форм.

Вернуться на верх