Как передать дополнительные kwargs для формирования на фабрике django modelformset? - PullRequest
1 голос
/ 20 января 2020

Как я могу передать дополнительные kwargs в django modelform в фабрике modelform

Я хочу, например, отключить все поля формы в подробном представлении.

forms.py:

class ConceptForm(forms.ModelForm):

  class Meta:
    model = app_models.Concept
    fields = '__all__'

  def __init__(self, *args, **kwargs):

    self.action = kwargs.pop('action', None)

    super(ConceptForm, self).__init__(*args, **kwargs)

    if self.action is not None:
      if self.action == 'detail':
        for field in self.fields:
          self.fields[field].widget.attrs['readonly'] = True

views.py

modelformset = modelformset_factory(
  model = model,
  fields = show_fields,
  form = ConceptForm(kwargs={'action': 'detail'), <-- I would like something like this
)

Ошибка:

Объект 'ConceptForm' не вызывается

Без вызова init нет ошибки показывали но поля формы не отключены

modelformset = modelformset_factory(
  model = model,
  fields = show_fields,
  form = ConceptForm
)

Заранее спасибо

1 Ответ

2 голосов
/ 20 января 2020

Как указано в Передача пользовательских параметров в формы набора форм в документации , вы можете использовать параметр form_kwargs=&hellip; FormSet:

ConceptFormSet = modelformset_factory(
    model = Concept,
    form = ConceptForm,
    fields = show_fields
)
formset = ConceptFormSet(<b>form_kwargs={'action': 'detail'}</b>)
...