Мета-класс используется для динамического построения определения формы - поэтому к моменту создания экземпляра ModelForm поля, не входящие в исключение, уже были добавлены в качестве атрибутов нового объекта.
Обычный способ сделать это - просто иметь несколько определений классов для каждого возможного списка исключений. Но если вы хотите, чтобы сама форма была динамичной, вам придется создавать определение класса на лету. Что-то вроде:
def get_form(exclude_list):
class MyForm(ModelForm):
class Meta:
model = Passenger
exclude = exclude_list
return MyForm
form_class = get_form(('field1', 'field2'))
form = form_class()
ОБНОВЛЕНИЕ : Я только что вернулся к этому посту и подумал, что опубликую немного более идиоматический способ обработки динамического класса:
def PassengerForm(exclude_list, *args, **kwargs):
class MyPassengerForm(ModelForm):
class Meta:
model = Passenger
exclude = exclude_list
def __init__(self):
super(MyPassengerForm, self).__init__(*args, **kwargs)
return MyPassengerForm()
form = PassengerForm(('field1', 'field2'))