[英]How to add default data to django model
我有一个 web 应用程序,其中包含以下 model
class Records(models.Model):
alias = models.CharField(max_length=17, unique=True)
status = models.BooleanField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.alias
def list_data(self):
return [self.alias, self.status, self.created_at, self.updated_at]
我希望在创建时将一些默认数据填充到此 model 中。 我浏览了文档和这个StackOverflow 问题来做同样的事情。
我首先运行这个命令来创建一个迁移文件(0001_initial.py)
python manage.py makemigrations --empty main_app
然后我按如下方式编辑了迁移文件
0001_initial.py
# Generated by Django 4.0.3 on 2022-04-23 05:57
from django.db import migrations
def add_initial_data(apps, schema_editor):
Records = apps.get_model('main_app', 'Records')
for record in Records.objects.all():
record.alias = f'ACCORD1'
record.status = True
record.save()
for i in range(2,6):
record.alias = f'ACCORD{i}'
record.status = False
record.save()
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.RunPython(add_initial_data)
]
当我使用以下命令运行迁移时
python manage.py migrate
我收到以下错误
LookupError: No installed app with label 'main_app'.
我尝试将依赖项添加到迁移文件中,如下所示
dependencies = [
('main_app', '0001_initial')
]
但这给了我以下错误
django.db.migrations.exceptions.CircularDependencyError: main_app.0001_initial
我不确定我做错了什么。
当被调用的文件与依赖项相关联时遇到循环依赖项错误,该依赖项将被调用的文件作为其依赖项。
在文件main_app/001_initial.py
中,您通过添加以下行添加了依赖main_app/001_initial.py
:
dependencies = [
('main_app', '0001_initial')
]
在迁移时,会出现混淆是导入文件main_app/001_initial.py
还是依赖文件main_app/001_initial.py
其依赖文件main_app/001_initial.py
。 因此,创建了一个循环依赖模式。
从迁移文件中添加多行数据不是一个好的编码范例的一部分。 你会想要使用不同的方法。
这些值只会在一次保存一个实例时帮助添加默认值。
class Records(models.Model):
alias = models.CharField(max_length=17, unique=True, default="ACCORD")
status = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.alias
现在有多种方法可以用数据填充表。
python manage.py shell
和python manage.py shellplus
。而不是在models.py
中使用list_data
function,使用 django 序列化程序将提供更多功能,并且是一种更好的编码方式。
这个想法是让models.py
尽可能干净,只有属性定义在那里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.