向models.py添加了附加模型,但是我得到`OperationalError:没有这样的表`

问题描述 投票:1回答:1

我的Web应用程序webapp有两个已在models.py中注册的表。我们称它们为Model1Model2。它们已经构建,可以工作,并且都已在我的Web应用程序的admin.py中注册,并且整个Web应用程序都在运行。我可以转到管理控制台(/admin),看看两个表都在那儿,我可以浏览它们。

我想添加第三个表Model3。我在models.py中写了代码-看起来与其他两个模型非常相似,但字段略有不同。我修改了admin.py使其包含它,就像其他两个一样。然后,我删除了migrations文件夹,并执行了以下Django命令:

$ python manage.py makemigrations webapp
Migrations for 'webapp':
  webapp/migrations/0001_initial.py
    - Create model Model1
    - Create model Model3
    - Create model Model2
$ python manage.py migrate webapp
Operations to perform:
  Apply all migrations: admin, webapp, auth, contenttypes, sessions
Running migrations:
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK

我不确定实际上正在运行的迁移是什么(最近我没有更改Model1Model2)。当我运行webapp并进入管理控制台时,Model3Model1Model2一起出现,但是单击它会产生以下错误:

Internal Server Error: /admin/webapp/model3/
Traceback (most recent call last):
  File "/.../venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/.../venv/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: webapp_model3

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/.../venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/.../lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  ... 
  (24 frames omitted)
  ...
  File "/.../venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/.../venv/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: webapp_model3

[当我尝试以编程方式访问模型时,也会出现这种类型的错误(importingmodels.py可以正常工作,但实际上访问Model3.objects会触发错误)。

我确定我已经忘记做something,但是我对what不知所措。

这使用的是Django提供的默认sqlite数据库。我无法完全删除我的数据库-由于与该问题无关的原因,不得不用当前具有的相同信息重新填充它很麻烦。我可以从最近的备份中恢复尽可能多的数据,并且在测试解决方案时一直在这样做。过去,我可以对Model1Model2进行修改,而无需删除和重新创建数据库。


生成的webapp/migrations/0001_initial.py的内容是:

# Generated by Django 2.2.5 on 2019-11-20 18:55

import webapp.models
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Model1',
            fields=[
                ('key1', models.FloatField(blank=True, primary_key=True, serialize=False)),
                ('key2', models.CharField(default=None, max_length=10)),
                ('key3', models.CharField(default=None, max_length=100)),
                ('key4', models.TextField(blank=True, default=None, null=True)),
                ('key5', models.ImageField(blank=True, default=None, upload_to=webapp.models.func1)),
            ],
        ),
        migrations.CreateModel(
            name='Model3',
            fields=[
                ('NewKey1', models.FloatField(blank=True, primary_key=True, serialize=False)),
                ('NewKey2', models.CharField(default=None, editable=False, max_length=10)),
                ('NewKey3', models.CharField(default=None, editable=False, max_length=100)),
                ('NewKey4', models.TextField(blank=True, default=None, editable=False, null=True)),
                ('NewKey5', models.TextField()),
            ],
        ),
        migrations.CreateModel(
            name='Model2',
            fields=[
                ('KeyA', models.IntegerField(primary_key=True, serialize=False)),
                ('KeyB', models.CharField(default=None, max_length=100)),
                ('KeyC', models.CharField(default=None, max_length=100)),
                ('KeyD', models.CharField(default=None, max_length=100)),
                ('KeyE', models.TextField(blank=True, default=None, null=True)),
                ('KeyF', models.ImageField(default=None, upload_to=webapp.models.func2)),
                ('KeyG', models.ImageField(default=None, upload_to=webapp.models.func3)),
                ('KeyH', models.BooleanField(default=False)),
                ('KeyI', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='webapp.Model1')),
            ],
        ),
    ]

python django
1个回答
0
投票
您需要:

自己创建一个新的迁移文件,例如0001_auto_20191120.py

    [从
  • only放置migrations.CreateModel文件中Model30001_initial.py
  • 0001_initial作为依赖项(放入迁移文件的dependencies列表内]
  • 运行python manage.py migrate webapp
© www.soinside.com 2019 - 2024. All rights reserved.