Пустой стол после того, как я сделал свои ВЫБОРЫ в модели
У меня есть такая модель django для категории :
class CategoryModel(models.Model):
CATEGORY_CHOICES = [
('first','hardware'),
('second','software'),
('third','network')
]
category = models.CharField(max_length=15,null=False,blank=False,choices=CATEGORY_CHOICES)
class Meta:
db_table = 'categories_table'
В базе данных создается таблица, но она пуста, а я хочу, чтобы в ней было три экземпляра каждого выбора, который я определяю в CATEGORY_CHOICES
Я хотел бы иметь как бы автоматическое заполнение, без ручного создания экземпляров
Не имеет особого смысла иметь одновременно choices
и модель CategoryModel
. Обычно это одна или другая, а не обе.
Действительно, обычно либо задается Category
, а затем, например, Product
с:
class Category(models.Model):
name = models.CharField(max_length=15, null=False, blank=False, unique=True)
def __str__(self):
return self.name
class Meta:
db_table = 'categories_table'
class Product(models.Model):
category = models.ForeignKey(Category, on_delete=models.PROTECT)
тогда вы можете, например, создать категории в оболочке с помощью:
Category.objects.bulk_create(
[Category(name=name) for name in ['hardware', 'software', 'network']]
)
Если вы не будете делать много запросов по категориям, считать по категориям или агрегировать по категориям, вы также можете решить отказаться от модели Category
, и просто сделать поле, которое указывает на предопределенные варианты, например:
CATEGORY_CHOICES = [
('hardware', 'hardware'),
('software', 'software'),
('network', 'network'),
]
# no Category model, a direct field of Product
class Product(models.Model):
category = models.CharField(max_length=15, choices=CATEGORY_CHOICES)
Однако я бы рекомендовал первый подход.