У меня было CharField with
choices
в модели, но мне нужно, чтобы это поле отображалось как CheckboxSelectMultiple
, которое возвращает список в класс формы. С TypedChoiceField
классом формы, который автоматически присваивается Field
с вариантами выбора, он не проверяется. Я решил изменить form_class
в поле и написал новое поле с TypedMultipleChoiceField
form_class
, чтобы проверить список.
class MultipleTypedChoiceModelField(models.Field):
def get_internal_type(self):
return 'MultipleTypedChoiceModelField'
def formfield(self, **kwargs):
defaults = {'form_class': TypedMultipleChoiceField, }
defaults.update(kwargs)
return super(MultipleTypedChoiceModelField, self).formfield(**defaults)
Но это не имеет никакого эффекта. Если я закомментировал выбор в поле модели, типом является MultipleTypedChoiceModelField. Поэтому я считаю, что класс form_class назначается в соответствии с определением списка вариантов.
def formfield(self, **kwargs):
if self._choices: # or self.choices:
defaults = {'form_class': TypedMultipleChoiceField, }
defaults.update(kwargs)
return super(MultipleTypedChoiceModelField, self).formfield(**defaults)
Но это тоже не имеет никакого эффекта. Я не нашел, где находится назначение form_class
. Может быть, у меня есть лучший способ изменить это поведение? Добавление дополнительной модели со многими ко многим я не планирую, потому что это явно не нужно.