【发布时间】:2017-01-08 08:28:58
【问题描述】:
在尝试对我的 Django 模型进行一些重大更改时,我把一切都搞砸了。幸运的是,我没有提交任何更改,所以我放弃了所有更改。下一步是让我的数据库恢复到以前的状态。最终,我可以成功运行makemigrations 和migrate 命令而不会出现问题。但是,每当我尝试访问该站点时,我都会收到 ProgrammingError 说我的表 topspots_notification 不存在。
我的migrations 文件夹中有以下迁移文件:
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-08-25 15:52
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('topspots', '0018_siteuser_share_location'),
]
operations = [
migrations.CreateModel(
name='Notification',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('message', models.TextField()),
('recipient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='recipient_notification', to=settings.AUTH_USER_MODEL)),
('sender', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='sender_notification', to=settings.AUTH_USER_MODEL)),
],
),
]
应该创建该表。如果我尝试专门运行此迁移,它将在尝试取消应用引用该表的后续迁移时失败,因为该表不存在。我已经尝试删除上面的迁移(我的notification 表是在其中创建的),以及它之后的每个模型。然后我再次运行makemigrations 和migrate,但它说没有要应用的迁移,并且我的表仍未创建。
我的问题是:为什么我在运行迁移时没有创建表?我知道我可以在 MySQL 中手动创建表,但我想知道我做错了什么用这种方式弄乱我的数据库。
我已经看到许多与未创建表和未应用迁移相关的 SO 帖子,但我还没有找到适合我的任何内容。
- 我的表不是“非托管”表。
- 我已尝试删除所有迁移并生成新迁移。
- 我已尝试为整个项目运行
migrate以及为特定应用程序甚至特定迁移运行迁移
我的假设是我的数据库本身中有一些东西告诉 Django 不要应用迁移,但我不知道要寻找什么。
任何建议将不胜感激。谢谢。
【问题讨论】:
-
python manage.py showmigrations显示什么?它是否将此迁移标记为已应用? -
@knbk 如果
[X]表示已应用,那么是的,它将所有迁移显示为已应用。 -
有一个表 django_migrations 保存所有应用迁移的历史。你可以试试看。
-
@user2976657 感谢您的建议!查看接受的答案,事实证明它与该表有关。
标签: mysql django database django-migrations