首先,现有模型在'0001_initial.py'。
中添加了我添加的"模型"后,当我进行" makemigrations"时,它将进入'0002_xxx.py'。
我成功地迁移了,数据库没有问题。
然后,当添加这些"模型"时,我想将初始数据放入数据库中。
因此,我制作了固定文件夹,用于在迁移后放入初始数据。
我将JSON文件放入其中。
但是,当我更改"模型"的名称并再次进行" makemigrations"时,我发现了一个错误。
所以我直接去了sqlite并删除了新型号上的所有桌子。
然后我做了迈克。
之后,
python3 manage.py migrate sbimage
当我这样"迁移"时,
django.db.utils.OperationalError: table "sbimage_camerathreshold" already exists
有这样的错误。
python3 manage.py migrate sbimage --fake
这两个都使0001,0002'伪造'。
是我的0002文件,是在" makemigrations"之后创建的。
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
运行迁移: 无需迁移。
理想情况下,您切勿直接从数据库中删除表。
您可以使用migration
命令恢复数据库。
./manage.py migrate my_app 00xx_migration_file_you_want_to_revert_to.py
目前,删除所有迁移文件,然后重新运行makemigration
和migrate
命令。
在使用数据库的代码第一次方法时,您绝对不要尝试直接操作数据库。就您的问题而言,您的迁移不适用,因为迁移始终按顺序适用。假设您已经迁移到了6个迁移,然后创建第七迁移,该迁移将检查您以前的迁移是否与数据库同步。在您的情况下,您直接对数据库进行硬编码已导致模型中的差异。最麻烦的方法将涉及您
- 从您的Django应用程序中删除迁移文件夹。
- 从数据库中的迁移表中删除所有数据。
- python manage.py makemigrations
- python manage.py迁移-Fake
之后,您可以重新应用迁移以将模型同步到数据库。