首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:在这种情况下,我如何迁移?迁移不起作用

Django:在这种情况下,我如何迁移?迁移不起作用
EN

Stack Overflow用户
提问于 2019-07-05 04:44:17
回答 2查看 1.5K关注 0票数 1

首先,现有模型位于'0001_initial.py‘中。

在添加了“模型”之后,当我添加了“makemigrations”之后,它将进入‘0002_xx.py’。

我成功地迁移了,数据库没有问题。

然后当这些“模型”被添加时,我想把最初的数据放到数据库中。

因此,我创建了一个文件夹,用于在迁移之后输入初始数据。

我把json文件放进去了。

然而,当我更改“模型”的名称并再次进行“制造”时,我发现表时出错了。

所以我直接去了sqlite,擦去了所有新型号的桌子。

然后我做了移民。

在那之后,

代码语言:javascript
复制
python3 manage.py migrate sbimage

当我像这样“迁移”到这里时,

代码语言:javascript
复制
django.db.utils.OperationalError: table "sbimage_camerathreshold" already exists

就像这样一个错误。

代码语言:javascript
复制
python3 manage.py migrate sbimage --fake

这使得0001,0002“伪造”。

这是我的0002文件是在“makemigrations”之后创建的。

代码语言:javascript
复制
from django.db import migrations, models

def load_my_initial_data(apps, schema_editor):
    call_command("loaddata", "addition.json")

class Migration(migrations.Migration):

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

    operations = [
        migrations.CreateModel(
            name='AuthNumberR',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('auth_number_r', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='AuthNumberT',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('auth_number_t', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='Claimant',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('claimant', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='CountryOfOrigin',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('country_of_origin', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='EquipmentName',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('equipment_name', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='FccId',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('fcc_id', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='Manufacturer',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('manufacturer', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='NbId',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('nb_id', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='Publisher',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('publisher', models.CharField(max_length=64)),
            ],
        ),
        migrations.CreateModel(
            name='WarningStateList',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('warning', models.CharField(max_length=4096)),
            ],
        ),
        migrations.CreateModel(
            name='WifiWarningStateList',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('wifi_warning', models.CharField(max_length=4096)),
            ],
        ),
        migrations.RunPython(load_my_initial_data),
    ]

如何在这种情况下创建新创建的模型表?

  • 这段代码根本不起作用。 python3 manage.py迁移sbimage 0002 运行迁移:没有要应用的迁移。
EN

回答 2

Stack Overflow用户

发布于 2019-07-05 04:51:06

理想情况下,永远不要直接从数据库中删除表。

您可以使用migration命令还原数据库。

./manage.py migrate my_app 00xx_migration_file_you_want_to_revert_to.py

现在,删除所有迁移文件并重新运行makemigrationmigrate命令。

票数 0
EN

Stack Overflow用户

发布于 2019-07-05 05:54:56

当您在数据库中使用代码优先方法时,您不应该尝试直接操作数据库。就您的问题而言,您的迁移并不适用,因为迁移总是在一个序列中应用。假设您已经迁移到6个迁移中,那么您将创建一个第7迁移,该迁移将检查您以前的迁移是否与您的数据库同步。在您的情况下,您的硬编码数据库直接造成了您的模型不一致。最麻烦的方法是你

  1. 从django应用程序中删除迁移文件夹。
  2. 从数据库中的迁移表中删除所有数据。
  3. python manage.py制作
  4. python manage.py迁移--假的

之后,您可以重新应用迁移来将模型同步到数据库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56896678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档