有时,由Django生成的迁移是不够的。当您要进行数据迁移时尤其如此。
例如,让我们拥有这样的模型:
class Article(models.Model): title = models.CharField(max_length=70)
该模型已经有现有数据,现在您想添加一个SlugField:
class Article(models.Model): title = models.CharField(max_length=70) slug = models.SlugField(max_length=70)
您创建了迁移以添加字段,但是现在,根据它们的,您想为所有现有文章设置标签title。
当然,您可以在终端中执行以下操作:
$ django-admin shell >>> from my_app.models import Article >>> from django.utils.text import slugify >>> for article in Article.objects.all(): ... article.slug= slugify(article.title) ... article.save() ... >>>
但是您将必须在所有环境(例如,办公室台式机,笔记本电脑等)中执行此操作,所有同事也必须执行此操作,并且您必须在登台和推送时进行考虑生活。
为了一劳永逸,我们将在迁移中做到这一点。首先创建一个空迁移:
$ django-admin makemigrations --empty app_name
这将创建一个空的迁移文件。打开它,它包含一个基本骨架。假设您之前的迁移已命名,0023_article_slug而此迁移已命名0024_auto_20160719_1734。这是我们将在迁移文件中写入的内容:
# -*- coding: utf-8 -*- # Generated by Django 1.9.7 on 2016-07-19 15:34 from __future__ import unicode_literals fromdjango.dbimport migrations from django.utils.text import slugify def gen_slug(apps, schema_editor): # We can't import the Article model directly as it may be a newer # version than this migration expects. We use the historical version. Article = apps.get_model('app_name', 'Article') for row in Article.objects.all(): row.slug= slugify(row.name) row.save() class Migration(migrations.Migration): dependencies = [ ('hosting', '0023_article_slug'), ] operations = [ migrations.RunPython(gen_slug, reverse_code=migrations.RunPython.noop), # We set `reverse_code` to `noop` because we cannot revert the migration # to get it back in the previous state. # If `reverse_code` is not given, the migration will not be reversible, # which is not the behaviour we expect here. ]
This manual migration process should be run after the automated migration process, to complete the missing parts, or debug issues in the migration CLI output. Project setup package.json Scoped package
本文向大家介绍Django 处理迁移,包括了Django 处理迁移的使用技巧和注意事项,需要的朋友参考一下 示例 Django使用迁移将您对模型所做的更改传播到数据库。django大多数时候都可以为您生成它们。 要创建迁移,请运行: 这将在的migration子模块中创建一个迁移文件app_name。第一个迁移将被命名0001_initial.py,另一个将以开头0002_,然后0003是...
我将我的数据库后端从sqlite3更改为PostGRE。当我尝试运行迁移时,我有一个错误 要执行的操作:同步未迁移的应用程序:messages、avtofarm、smart_selects、staticfiles、thumbnail应用所有迁移:contenttypes、admin、callboard、auth、sessions同步未迁移的应用程序:创建表...正在运行延迟SQL...正在安装自定
我有一个表单,其中有些字段不是模型的字段。在发送到渲染之前,我想在我的视图中填充它们.. 我的表格: 我的视图代码: 谢啦
问题内容: 如何在Django上使用South执行向后迁移? 因此,我调整了模型,使用进行了迁移schemamigration,使用进行了迁移migrate,现在我意识到这并不是我想要的,并且我想回到以前的样子。 除了手动编辑数据库表和删除迁移文件之外,我应该如何回滚迁移?我找到了通过Google通过South使用向后迁移的参考,但尚未找到可靠的代码示例。 有人可以帮忙吗? 问题答案: 你需要在要
我必须定义code.Spatial类,如主键和codels.LScharacteristic codels.PlannedUsing,如外键。当我尝试migrate:ProgrammingError:ERROR:foreign key约束中指定的id列不存在时,我遇到了这个问题。 UPD完整日志:上述异常是以下异常的直接原因: 回溯(最后一次调用):文件“manage.py”,第23行,从命令行执