[Python] Динамическое обновление метафайла ModelForm


Answers

Другой путь:

class PassengerInfoForm(ModelForm):
    def __init__(self, *args, **kwargs):
        exclude_list=kwargs.pop('exclude_list', '')

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

        for field in exclude_list:
            del self.fields[field]

    class Meta:
        model = Passenger

form = PassengerInfoForm(exclude_list=['field1', 'field2'])
Question

Я надеюсь динамически обновить встроенный Meta-класс ModelForm из моего представления. Хотя этот код, похоже, обновляет список исключений в классе Meta, вывод из as_p() , as_ul() и т. Д. Не отражает обновленное исключение Meta.

Я предполагаю, что html генерируется, когда ModelForm создается не тогда, когда вызывается as_*() . Есть ли способ принудительно обновить HTML?

Это даже лучший способ сделать это? Я просто предположил, что это должно сработать.

Мысли?

from django.forms import ModelForm

from testprogram.online_bookings.models import Passenger

class PassengerInfoForm(ModelForm):

    def set_form_excludes(self, exclude_list):
        self.Meta.exclude = excludes_list

    class Meta:
        model = Passenger
        exclude = []



Использовать modelform_factory ( doc ):

from django.forms.models import modelform_factory

from testprogram.online_bookings.models import Passenger

exclude = ('field1', 'field2')
CustomForm = modelform_factory(model=Passenger, exclude=exclude)  # generates ModelForm dynamically
custom_form = CustomForm(data=request.POST, ...)  # form instance