То, что вы пытаетесь сделать, это не так просто, используя CharField и помещая в него несколько опций, поэтому вы должны сначала найти способ сериализации и восстановления данных в модели, посмотрите здесь .
если вы находитесь в базе данных postgres, вы можете сделать это следующим образом (благодаря полям массива postgres у вас нет головной боли при сериализации и восстановлении данных)
from django.contrib.postgres.fields import ArrayField
class ChoiceArrayField(ArrayField):
"""
A field that allows us to store an array of choices.
Uses Django 1.9's postgres ArrayField
and a MultipleChoiceField for its formfield.
Usage:
choices = ChoiceArrayField(models.CharField(max_length=..., choices=(...,)), default=[...])
"""
def formfield(self, **kwargs):
defaults = {
'form_class': forms.MultipleChoiceField,
'choices': self.base_field.choices,
}
defaults.update(kwargs)
return super(ArrayField, self).formfield(**defaults)
, а затем вы можетеиспользуйте ChoiceArrayField на вашей модели
Обновление:
Таким образом, чтобы использовать это на вашей модели, вы можете сделать это следующим образом:
class Product(models.Model):
categories = ChoiceArrayField(max_length=8, choices=CATEGORIES_LIST, default=['for_him', 'for_her'])