如何将默认数据添加到django模型
How to add default data to django 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]
我希望在创建时将一些默认数据填充到此模型中。我经历了 documentation and this 做同样的事情。
我先运行这个命令创建一个migrations文件(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
我不确定我做错了什么。
CircularDependencyError
当被调用的文件与一个依赖相关联时遇到循环依赖错误,该依赖将被调用的文件作为其依赖。
在文件 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
现在有多种方法可以用数据填充 table。
- Link 数据行已到位的数据库的 django 应用程序。
- 添加序列化程序函数 BulkCreate 以批量添加值。
- 手动使用命令行 shell 创建将填充数据库 table 的模型实例。您可以阅读有关使用
python manage.py shell
和 python manage.py shellplus
. 的信息
- 使用 python 脚本通过创建具有所需值的模型实例来添加数据。
另一个提示
与其在 models.py
中使用 list_data
函数,不如使用 django 序列化程序提供更多功能,并且是一种更好的编码方式。
我们的想法是让 models.py
尽可能干净,只有属性定义在那里。
我有一个具有以下模型的网络应用程序
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]
我希望在创建时将一些默认数据填充到此模型中。我经历了 documentation and this
我先运行这个命令创建一个migrations文件(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
我不确定我做错了什么。
CircularDependencyError
当被调用的文件与一个依赖相关联时遇到循环依赖错误,该依赖将被调用的文件作为其依赖。
在文件 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
现在有多种方法可以用数据填充 table。
- Link 数据行已到位的数据库的 django 应用程序。
- 添加序列化程序函数 BulkCreate 以批量添加值。
- 手动使用命令行 shell 创建将填充数据库 table 的模型实例。您可以阅读有关使用
python manage.py shell
和python manage.py shellplus
. 的信息
- 使用 python 脚本通过创建具有所需值的模型实例来添加数据。
另一个提示
与其在 models.py
中使用 list_data
函数,不如使用 django 序列化程序提供更多功能,并且是一种更好的编码方式。
我们的想法是让 models.py
尽可能干净,只有属性定义在那里。