Вы можете изменить поля формы с помощью __init__
:
from django import forms
class Foo(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if condition:
self.fields.pop('field1')
class Meta:
model = SomeModel
fields = ('field1', 'field2', 'field3')
Обратите внимание, что это может привести к сбою проверки формы, если поле является обязательным.
Лучше было бы скрыть поле, а не удалять его полностью:
class Foo(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if condition:
form.fields['field1'].widget = forms.HiddenInput()
class Meta:
model = SomeModel
fields = ('field1', 'field2', 'field3')