我清除了我的 Django 应用程序上的数据库以重新开始。我通过删除数据库文件和现有迁移然后重新运行makemigrations
和migrate
. 我当然先备份了数据库。
我很快遇到了一个问题;提交表格后,我被告知The table 'topics__old' does not exist.
我认为这很奇怪,因为我已经命名了我所有的表格,而那不是其中之一。以下是相关模型:
class Topic(models.Model, FormatDateMixin):
topic_id = models.UUIDField(primary_key=True,
default=uuid.uuid4,
editable=False)
submitted_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
comment = models.TextField(max_length=150)
created_date = models.DateTimeField(default=timezone.now)
class Meta:
db_table = 'topics'
class TopicUpdate(models.Model, FormatDateMixin):
update_id = models.UUIDField(primary_key=True,
default=uuid.uuid4,
editable=False)
original_topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
submitted_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
comment = models.TextField(max_length=150)
update_date = models.DateTimeField(default=timezone.now)
class Meta:
db_table = 'topic_updates'
我检查了旧工作版本和当前版本的数据库文件,发现以下内容:
原表:
CREATE TABLE "topic_updates" ("update_id" char(32) NOT NULL PRIMARY KEY, ... "original_topic_id" char(32) NOT NULL REFERENCES "topics" ("topic_id") DEFERRABLE INITIALLY DEFERRED, ...
新表:
CREATE TABLE "topic_updates" ("update_id" char(32) NOT NULL PRIMARY KEY, ... "original_topic_id" char(32) NOT NULL REFERENCES "topics__old" ("topic_id") DEFERRABLE INITIALLY DEFERRED, ...
正如您在创建数据库时看到的那样,Django__old
在引用外键时附加到表名,这会导致应用程序中的错误topics__old
不存在。
我试过删除所有__pycache__
文件夹,删除所有迁移文件,重新运行makemigrations
和migrate --run-syncdb
. 这些都没有解决问题。
应该注意的是,它确实按预期创建了表格topics
和与表格相关的表格。topics
为什么会这样?