Проблема заключалась в том, что список исключенных полей был получен из model._meta.get_fields (), а не в списке строк, и условие if не подходило, потому что self.fields является python orderdict.
Этот код решает проблему:
class CustomModelForm(forms.ModelForm):
class Meta:
model = app_models.CustomModel
fields = '__all__'
def __init__(self, excluded_fields=None, *args, **kwargs):
super(CustomModelForm, self).__init__(*args, **kwargs)
show_fields = []
for field in excluded_fields:
show_fields.append(field.name)
for meta_field in list(self.fields):
if meta_field not in show_fields:
del self.fields[meta_field]