Пустой стол после того, как я сделал свои ВЫБОРЫ в модели

У меня есть такая модель 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)

Однако я бы рекомендовал первый подход.

Вернуться на верх