我有这个类别的 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)
然后您可以使用以下命令在 shell 中创建类别:
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)
但是我推荐第一种方法。