我有两个简单的迁移:

0001_initial.py

# Generated by Django 4.2.7 on 2023-11-30 11:15

from django.db import migrations, models


class Migration(migrations.Migration):
    initial = True

    dependencies = []

    operations = [
        migrations.RunSQL(
            """
            CREATE TABLE comments (
                id SERIAL PRIMARY KEY,
                contents VARCHAR(240) NOT NULL 
            );
            """
        ),
    ]

0002.py

# Generated by Django 4.2.7 on 2023-11-30 11:15

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ("polls", "0001_initial")
    ]

    operations = [
        migrations.RunSQL(
            """
            ALTER TABLE comments RENAME COLUMN contents to text;
            """
        ),
    ]

我 run :

python manage.py migrate

然后我想undo撤消0002迁移

我在 run

python manage.py migrate polls 0001

但是Django不知道如何撤销第二次迁移的更改.

How can I tell Django that for undoing the changes from the 0002 migration I need to run this SQL:

ALTER TABLE comments RENAME COLUMN text to contents;

我试着寻找,但没有成功.

推荐答案

RunSQL migration [Django-doc]带有第二个可选参数,您可以在其中指定反向迁移,因此:

class Migration(migrations.Migration):

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

    operations = [
        migrations.RunSQL(
            'ALTER TABLE comments RENAME COLUMN contents TO text;',
            'ALTER TABLE comments RENAME COLUMN text TO contents;',
        ),
    ]

如果您随后迁移到:

manage.py migrate polls 0001

它将查看是否所有迁移都有反向操作,并接受该查询.

Django相关问答推荐

如何在Django模型mixin字段定义中引用模型名称?

如何在Django REST框架中使用FactoryBoy创建不同的项目

如何自动删除 Django 模型中的字段值?

Django rest framework, AttributeError: 'str' object has no attribute 'data' 无法使用表单上传图片

遍历django模板中的外键相关表

django 创建多种类型用户的最佳方法

如何使用 matplotlib 在绘图的角落插入小图像?

Django InlineModelAdmin:部分显示内联模型并链接到完整模型

Django Calendar日历小部件?

在 Django 的 ORM 中访问存储过程的最佳方法是什么

Django 管理命令参数

目前使用 Django Evolution,South是否更好,值得切换?

Django rest-auth allauth 注册,带有邮箱、名字和姓氏,没有用户名

如何使用 select_for_update 在 Django 中获取查询?

Django 向用户推送 HTTP 响应

在 Django 中的字段中添加额外的约束

django 如何知道已经运行了哪些迁移?

想要在 Django 测试中禁用信号

django rest 框架:从序列化程序 validate() 方法设置字段级错误

Django 字符串到日期格式