自动伪造 Django 迁移

     2023-02-24     125

关键词:

【中文标题】自动伪造 Django 迁移【英文标题】:Auto Fake Django Migration 【发布时间】:2018-08-15 11:22:47 【问题描述】:

我需要自动伪造 Django 1.9 迁移。是否有一个标志可以放入自动伪造的迁移文件中,而不必登录到多个服务器并运行。

迁移布局是这样的

migtarions
    |-- 0001_initial.py
    |-- 0002.py
    |-- 0003.py

我知道我可以做 ./manage.py my_app migrate 0002 --fake,但是迁移 0002 可以自动伪造吗?我只需要运行 ./manage.py my_app migrate

【问题讨论】:

请注意,Django 1.9 已结束生命周期,并且不会收到安全更新。您至少应该尝试升级到 1.11.x LTS 版本。 您可以删除MigrationMigration 中的operations 0002.py 并将它们替换为不执行任何操作的虚拟文件(或删除文件并更正dependencies) . 也许我应该更清楚我需要做什么。我有一个现有的表,它是第三方应用程序的一部分。我正在重写模型,更改了一些字段。所以 0002.py 使用引用现有表的元创建新模型。 0003.py 然后进行字段更新。 您需要删除 0002.py 迁移文件并再次运行迁移命令。 【参考方案1】:

Django 1.8+ 不会自动伪造迁移。您需要使用 --fake-initial 选项告诉 Django 伪造初始迁移。

./manage.py migrate --fake-initial

然后您可以在 0002 迁移类上设置 initial = True 以告诉 Django 这是一个初始迁移。

class Migration(migrations.Migration):
    initial = True    
    dependencies = [('migrations', '0001_initial')]

有关更多信息,请参阅initial migrations 上的文档。

【讨论】:

【参考方案2】:

从 Django 的本地用户模型迁移到具有现有迁移的实时项目中的自定义模型时,我需要做同样的事情。我通过重写 apply/unapply 方法来完成它:

# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2018-08-13 13:43
from __future__ import unicode_literals

import django.contrib.auth.models
import django.core.validators
from django.db import migrations, models
import django.utils.timezone


class Migration(migrations.Migration):

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

    operations = [
        migrations.CreateModel(
            name='User',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('password', models.CharField(max_length=128, verbose_name='password')),
                ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
                ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
                ('username', models.CharField(error_messages='unique': 'A user with that username already exists.', help_text='Required. 255 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=255, unique=True, validators=[django.core.validators.RegexValidator('^[\\w.@+-]+$', 'Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters.')], verbose_name='username')),
                ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')),
                ('last_name', models.CharField(blank=True, max_length=30, verbose_name='last name')),
                ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')),
                ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
                ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
                ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
                ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
                ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
            ],
            options=
                'db_table': 'auth_user',
            ,
            managers=[
                ('objects', django.contrib.auth.models.UserManager()),
            ],
        ),
    ]

    def apply(self, project_state, schema_editor, collect_sql=False):
        return project_state

    def unapply(self, project_state, schema_editor, collect_sql=False):
        return project_state

【讨论】:

如何伪造飞行路线迁移?

】如何伪造飞行路线迁移?【英文标题】:Howtofakeflywaymigration?【发布时间】:2016-03-1306:09:39【问题描述】:我们两个人在不同的GIT分支中编写了一个迁移脚本。现在,我已经拉出原始开发分支,并更正了GIT合并问题,并将我的... 查看详情

重命名 Django 迁移文件是不是安全?

...移文件指定自定义名称。我想知道在旧版本的Django中使用自动生成的名称创建迁移文件然后手动重命名文件是否 查看详情

django--csrf跨站请求伪造(代码片段)

一、简介django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。全局:  中间件 django.middleware.csrf.CsrfViewMiddleware局部... 查看详情

将 postgresql 索引转换为 Django 迁移

...数据库中手动添加了一些附加功能,而当时Django的数据库自动化并未公开支持这些功能,尤其是自定义索引的形式。Dj 查看详情

如何在 django 迁移中执行原始 SQL

...一堆函数和触发器,必须在设置时添加到数据库中,我想自动化。【问题讨论】:【参考方案1】:一种方式:我发现最好的方 查看详情

使用 Django 和 websockets 进行跨站点请求伪造保护

】使用Django和websockets进行跨站点请求伪造保护【英文标题】:CrossSiteRequestForgeryprotectionwithDjangoandwebsockets【发布时间】:2019-04-1003:12:00【问题描述】:我已经使用Django通道(v.2.1.5)在我的Django(v.2.0)驱动的网站上成功创建了一个webso... 查看详情

跨站请求伪造(代码片段)

一、简介django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。全局:  中间件 django.middleware.csrf.CsrfViewMiddleware局部... 查看详情

django中csrftoken跨站请求伪造的几种方式(代码片段)

...户浏览器上藏一段随机字符串,发送post请求时,浏览器自动携带该字符串来进行识别2.方式一在前端中添加%csrf 查看详情

Django迁移默认值可调用生成相同的条目

...:我正在向现有数据库表添加一个新字段。它是用字符串自动生成的。这是我的代码:fromdjango.utils.cryptoimportget_random_string...Model:verificat 查看详情

csrf

...的cookie里,django会为你添加一个csrftoken字段,其值为一个自动生成的token在所有的POST表单时,必须包含一个csrfmiddlewaretoken 查看详情

使 django 项目文件夹的迁移不起作用

...已全部设置完毕并按我的需要工作。这个现有项目的模型自动放置在我的项目目录中。以下是相关目录的大致思路:myProject|manage.py|myProject||mode 查看详情

在 django 中自动制作模型?

】在django中自动制作模型?【英文标题】:Makingmodelsautomaticallyindjango?【发布时间】:2017-12-3105:59:12【问题描述】:你能告诉我有什么方法可以在django中自动创建和迁移模型吗?让我简单解释一下:classDevice1_Data(models.Model):created_a... 查看详情

在 django 1.8 中将数据从原始用户模型迁移到自定义用户模型

...数据迁移将数据迁移到我的自定义用户模型。这就是我在自动迁移文件中进行数据迁移的方式(我从here找到的):更新 查看详情

Android-Room 可以自动创建迁移吗?

】Android-Room可以自动创建迁移吗?【英文标题】:CanAndroid-Roomauto-createmigrations?【发布时间】:2019-12-1813:19:57【问题描述】:在Android上使用Roomforsqlite库时,我注意到虽然数据库的第一个版本的表是自动创建的,但我只看到了有关... 查看详情

如何将模型从一个 django 应用程序迁移到一个新应用程序中?

...程序中。我确实为迁移安装了南,但我不认为这是它可以自动处理的东西。如何将其中一个模型从旧应用迁移到新应用中? 查看详情

django系列12:django模型关系

迁移分两步实现生成迁移文件执行迁移文件迁移文件的生成根据models文件生成对应的迁移文件根据models和已有迁移文件差别生成新的迁移文件执行迁移文件先去迁移记录查找,哪些文件未迁移过app_label+迁移文件名字执行未迁移... 查看详情

使用元类设置时 Django 迁移忽略 db_table

...布时间】:2018-12-0910:42:58【问题描述】:我正在使用元类自动将我的Django模型数据库表名从驼峰式大小写设置为“_”分隔名称,例如MyGreatModel将有一个类似appname_my_great_model的表名,而不是默认的appname 查看详情

Django 的核心迁移工具与 Django 数据迁移的 South

】Django的核心迁移工具与Django数据迁移的South【英文标题】:Django\'sCoreMigrateToolvsSouthforDjangoDataMigrations【发布时间】:2014-01-1203:27:11【问题描述】:我目前没有在我的Django项目中使用迁移,但我打算很快使用。我知道South是事实... 查看详情