您将如何创建“手动”django 迁移?

Kei*_*son 35 django

我发现我可以在 django 项目中使用migrations.RunSQL('some sql').

我目前正在通过添加一个列,makemigrations,然后删除该列,makemigrations,然后手动修改生成的迁移文件来执行此操作。

我尝试复制一个旧的迁移文件,然后删除旧代码,这样就可以运行新的 sql 并出现一些奇怪的错误。

CommandError: Conflicting migrations detected; multiple leaf nodes in the migration graph: (0067_auto_20180509_2327, 0068_auto_20180514_0707 in csmu).
To fix them run python manage.py makemigrations --merge
Run Code Online (Sandbox Code Playgroud)

您将如何创建“手动”django 迁移?

小智 50

您可以通过运行以下命令来创建手动迁移:

python manage.py makemigrations --name migration_name app_name --empty
Run Code Online (Sandbox Code Playgroud)

app_name符合您的项目中的应用程序,你要添加的迁移。记住 Django 管理项目和应用程序(一个项目是一个特定网站的配置和应用程序的集合。一个项目可以包含多个应用程序。一个应用程序可以在多个项目中。)并且--empty标志是创建一个迁移文件,您将在其中拥有添加您的手动迁移。

例如,在一个名为应用程序的项目中,该应用程序api0001_initial.py运行一个迁移文件:

python manage.py makemigrations api --name migration_example --empty
Run Code Online (Sandbox Code Playgroud)

0002_migration_example.py在目录下创建一个名为的文件api/migrations/,如下所示:

# Generated by Django 2.2.10 on 2020-05-26 20:37

from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
        ('api', '0001_initial'),
    ]

    operations = [
    ]
Run Code Online (Sandbox Code Playgroud)

您应该migrations.RunSQL('some sql').在操作括号内添加,例如:

    operations = [
      migrations.RunSQL('some sql')
    ]
Run Code Online (Sandbox Code Playgroud)


Moh*_*mir 7

您可以通过调查自动生成的迁移来了解如何进行迁移,例如:


class Migration(migrations.Migration):

    dependencies = [
        ('app_details', '0001_initial'),
    ]

    operations = [
        migrations.AddField(
            ...,
        ),
        migrations.CreateModel(
            ...,
        ),
        migrations.RenameModel(
            ...,
        ),
        migrations.RenameField(
            ...,
        ),
        migrations.RemoveModel(
            ...,
        ),
        # and so on
    ]

Run Code Online (Sandbox Code Playgroud)

创建手动迁移文件

在终端中使用此命令:python manage.py makemigrations --empty. 然后在里面添加你想要的东西。

注意:您必须在“models.py”和手动迁移之间进行组合。