我希望我的应用程序具有默认数据,例如用户类型。
在迁移后管理默认数据的最有效方式是什么?
它需要处理这样的情况,例如在添加新表后,自动添加其默认数据。
我希望我的应用程序具有默认数据,例如用户类型。
在迁移后管理默认数据的最有效方式是什么?
它需要处理这样的情况,例如在添加新表后,自动添加其默认数据。
您需要创建一个空的迁移文件,并在操作块中进行操作,如文档中所述。
除了更改数据库模式外,如果需要,您还可以使用迁移来更改数据库本身中的数据与模式相结合。
现在,您只需要创建一个新函数并使用RunPython即可。
文档通过示例说明了如何与您的模型进行通信。
来自文档
要创建一个空的迁移文件,请
python manage.py makemigrations --empty yourappname
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
def combine_names(apps, schema_editor):
# We can't import the Person model directly as it may be a newer
# version than this migration expects. We use the historical version.
Person = apps.get_model("yourappname", "Person")
for person in Person.objects.all():
person.name = "%s %s" % (person.first_name, person.last_name)
person.save()
class Migration(migrations.Migration):
initial = True
dependencies = [
('yourappname', '0001_initial'),
]
operations = [
migrations.RunPython(combine_names),
]
所接受的答案是正确的。但是,由于原帖中的问题涉及添加新行而不是更新现有条目。以下是添加新条目的代码片段:
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('loginmodule', '0002_login_avatar'),
]
def insertData(apps, schema_editor):
Login = apps.get_model('loginmodule', 'Login')
user = Login(name = "admin", login_id = "admin", password = "password", email = "admin@pychat.com", type = "Admin", avatar="admin.jpg")
user.save()
operations = [
migrations.RunPython(insertData),
]
更新:
大多数用户都像@durdenk建议的那样寻找数据迁移https://dev59.com/QVkS5IYBdhLWcg3wgXLf#39742847。但是,OP所问的是一种在迁移之后添加数据的方法,这就是为什么这个答案被接受的原因。
原始答案:
我认为你正在寻找的是fixtures
https://docs.djangoproject.com/en/1.10/howto/initial-data/
从文档中可以看到:
在首次设置应用程序时,通过硬编码数据预填充数据库有时很有用。您可以通过fixtures提供初始数据。
上面给出的答案只是为了演示如何向表中插入新行。
from django.db import migrations, models
from yourapp.models import <yourmodel>
def combine_names(apps, schema_editor):
obj = <yourmodel>(arrib=value)
obj.save()
person = Person(first_name='raj', last_name='shah')
person.save()
operations = [migrations.CreateModel(...), migrations.RunPython(...)]
- Andrew