【发布时间】:2014-11-13 18:27:01
【问题描述】:
我想在一个新项目中使用 Django 1.7。 而且我已经有很多记录的数据库。
在许多 Django 教程中, 它演示了如何从一个全新的项目中使用迁移系统。
就我而言,使用 django-admin startapp todo
并将使用名为notesnote 的现有表。
我使用inspectdb 转储notesnote 类并将其写入todo/models.py
class NotesNote(models.Model):
title = models.CharField(max_length=100)
text = models.TextField()
pub_date = models.DateTimeField()
authors = models.CharField(max_length=10)
然后
python manage.py makemigrations todo
生成todo/migrations/0001_initial.py
那么
python manage.py migrate --fake todo
做一个假迁移(因为表已经存在)。
然后,如果我想修改表格的字段,请添加一个“类别”字段
category = models.CharField(max_length=30)
然后通过以下方式生成0002迁移差异:
python manage.py makemigrations todo
但是,当我进行迁移时
python manage.py migrate todo
我收到如下错误:
django.db.utils.OperationalError: no such table: todo_notesnote
似乎它在现有表的前面添加了应用程序的名称。 我应该执行哪些步骤来对现有表进行可用迁移?
【问题讨论】:
-
哎呀,我想也许我一开始就错了,我以为“NotesNote”已经存在,所以使用“--fake”
-
您是否阅读过有关integrating Django with a legacy database 的文档?在那里您可以找到一些有用的建议:特别是您应该在模型的内部 Meta 类中添加一个 db_table = 'NotesNote' 选项。
-
@Baxeico,非常感谢,我从来不认识文档,让我学习一下:)
-
@baxeico 阅读文档后,它的工作原理,非常感谢。虽然我不知道如何将其标记为已解决:(
-
我添加了我的评论作为答案,阅读etiquette 我可能从一开始就将其添加为anwser。如果您觉得有用,可以将我的回答标记为已接受。