我的Web应用程序webapp
有两个已在models.py
中注册的表。我们称它们为Model1
和Model2
。它们已经构建,可以工作,并且都已在我的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
我不确定实际上正在运行的迁移是什么(最近我没有更改Model1
和Model2
)。当我运行webapp并进入管理控制台时,Model3
与Model1
和Model2
一起出现,但是单击它会产生以下错误:
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
[当我尝试以编程方式访问模型时,也会出现这种类型的错误(importing从models.py
可以正常工作,但实际上访问Model3.objects
会触发错误)。
我确定我已经忘记做something,但是我对what不知所措。
这使用的是Django提供的默认sqlite数据库。我无法完全删除我的数据库-由于与该问题无关的原因,不得不用当前具有的相同信息重新填充它很麻烦。我可以从最近的备份中恢复尽可能多的数据,并且在测试解决方案时一直在这样做。过去,我可以对Model1
和Model2
进行修改,而无需删除和重新创建数据库。
生成的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')),
],
),
]
自己创建一个新的迁移文件,例如0001_auto_20191120.py
migrations.CreateModel
文件中Model3
的0001_initial.py
块0001_initial
作为依赖项(放入迁移文件的dependencies
列表内]python manage.py migrate webapp