Может ли Car
иметь несколько color
с?В этом случае color
должно быть отношением ко многим , а не CharField
.Если, с другой стороны, вы хотите сделать что-то вроде Unix-разрешения (т.е. красный + синий, красный + синий + зеленый и т. Д.), Присвойте числовые значения каждому из них и сделайте color
целочисленное поле .
Обновление
(После прочтения комментария) Вы можете использовать пользовательскую форму для редактирования модели в Admin вместо значения по умолчанию ModelForm
.Эта пользовательская форма может использовать виджет с множественным выбором, который позволяет пользователям выбирать несколько цветов.Затем вы можете переопределить метод clean()
формы для возврата подходящего каскадного значения ('RB' и т. Д.).
Update 2
Вот некоторый код:
Сначала удалите выбор из поля модели.Также увеличьте его максимальный размер до 2. Мы не хотим, чтобы выбор здесь - если мы сделаем это, то нам придется добавить выбор для каждой комбинации цветов.
class Car(models.Model):
...
color= models.CharField(max_length=2)
Во-вторых, добавьте пользовательский ModelForm
для использования в приложении администратора.Эта форма переопределит цвет и вместо этого объявит его как поле с множественным выбором.Мы делаем здесь нужен выбор.
COLORS= (
('R', 'Red'),
('B', 'Yellow'),
('G', 'White'),
)
class CarAdminForm(ModelForm):
color = forms.MultipleChoiceField(choices = COLORS)
class Meta:
model = Car
def clean_color(self):
color = self.cleaned_data['color']
if not color:
raise forms.ValidationError("...")
if len(color) > 2:
raise forms.ValidationError("...")
color = ''.join(color)
return color
Обратите внимание, что я добавил только пару проверок.Вы можете захотеть больше и / или настроить валидации.
Наконец, зарегистрируйте эту форму у администратора.Внутри вашего admin.py
:
class CarAdmin(admin.ModelAdmin):
form = CarAdminForm
admin.site.register(Car, CarAdmin)