当前位置: 首页 > 编程笔记 >

Django 手动迁移

马博学
2023-03-14
本文向大家介绍Django 手动迁移,包括了Django 手动迁移的使用技巧和注意事项,需要的朋友参考一下

示例

有时,由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行,从命令行执