我想在使用makemigrations命令创建相关模型时在我的数据库中添加一些默认值。
例如,我将此作为模型;
class BaseModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True, verbose_name='Created Date')
modified_at = models.DateTimeField(auto_now=True, verbose_name='Update Date')
is_deleted = models.BooleanField(default=False, verbose_name='Deleted')
class Meta:
abstract = True
class ModelType(BaseModel):
description = models.CharField(verbose_name='Name', max_length=225 )
正如我之前所说,我想为我的ModelType表添加一些默认值(“value1”,“value2”,“value3”,“value4”)。这可能吗?
答案 0 :(得分:1)
如果要在执行给定迁移时始终添加默认数据,最安全的方法是使用数据迁移(如@Kos所建议的那样)。
要创建数据迁移,请使用./manage.py makemigrations <app_label> --empty
并手动添加所需代码以填充数据。
我通常使用在指定模型上执行get_or_create的自定义操作。将此代码添加到迁移文件本身或可以从以下位置导入的位置:
from django.db import migrations
def noop(apps, schema_editor):
pass
class EnsureInstanceCreated(migrations.RunPython):
def __init__(self, app_name, model_name, attrs, defaults=None):
super(EnsureInstanceCreated, self).__init__(self.add_instance, noop)
self.app_name = app_name
self.model_name = model_name
self.attrs = attrs
self.defaults = defaults
def add_instance(self, apps, schema_editor):
Model = apps.get_model(self.app_name, self.model_name)
Model.objects.get_or_create(
defaults=self.defaults,
**self.attrs
)
然后,在迁移本身:
from django.db import migrations
from myproject.utils.migrations import EnsureInstanceCreated
class Migration(migrations.Migration):
dependencies = [
('myproject', '000x_auto_...'),
]
operations = [
EnsureInstanceCreated('myapp', 'ModelType', attrs={
'description': 'value1',
}, defaults={
# ...
}),
EnsureInstanceCreated('myapp', 'ModelType', attrs={'description': 'value2'}),
EnsureInstanceCreated('myapp', 'ModelType', {'description': 'value3'}),
]
答案 1 :(得分:0)
显然有一种方法。您可以使用Fixtures用数据初始化模型。
请参阅此文档:https://docs.djangoproject.com/en/1.10/howto/initial-data/