从Django 1.7+中删除模型时要做的事情

时间:2015-03-14 00:46:36

标签: django

我想知道当我们想要从Django中删除模型时,是否有任何人可以提供需要完成的事情的完整列表。我知道有人提出了类似的问题。但似乎是几年前人们还在使用南方来处理数据库。所以我希望得到最近版本的Django的答案。

我总结如下所知:

  1. 从model.py
  2. 删除模型的代码
  3. 确保没有其他文件导入此模型或使用它们 (admin.py,views.py等)
  4. 运行 makemigrations 迁移命令
  5. 由于Django没有为您清理数据库,因此删除了表格 这个模型从你的数据库手动
  6. 另请注意,有一个名为ContentTypes的表,它保留 关于我们每个型号的信息的记录。所以你需要删除 手动记录这个模型(但我不知道该怎么做 究竟。有人会给出一些解释吗?)
  7. 这些都是我所知道的。有什么不对的吗?我忘了什么吗?也许我过于谨慎,但我想保持数据库清洁。 非常感谢!

1 个答案:

答案 0 :(得分:24)

在Django 1.7中,这实际上比你想象的要简单得多。我们假设您有一个应用books,有两个模型:BookBookReview。您想要删除Book模型。

  1. 删除代码中对Book模型的所有引用。例如,删除ForeignKey('books.Book')模型上的BookReview字段。没有必要为此更改单独迁移。
  2. Book删除books/models.py模型的代码。现在,创建一个迁移(manage.py makemigrations)。如果查看生成的迁移,则应包括migrations.DeleteModel操作。
  3. 运行自动生成的迁移(manage.py migrate),系统会询问您不再需要的相关ContentType个对象:

    Running migrations:
      Applying books.0002_auto_20150314_0604... OK
    The following content types are stale and need to be deleted:
    
        books | book
    
    Any objects related to these content types by a foreign key will also
    be deleted. Are you sure you want to delete these content types?
    

    您可能确实想要删除内容类型。如果您不想被要求输入,可以使用manage.py migrate --noinput

    此迁移中的DeleteModel操作会删除数据库中的books_book表,因此您根本不必担心手动清理。