27

最初,我在 Django 的一个项目中制作了 2 个应用程序(app_a 和 app_b)。现在我想删除一个(比如 app_a)。我该怎么做?从设置文件中删除应用程序名称是否INSTALLED_APPS足够?

4

3 回答 3

51

您需要删除或检查以下内容:

  • 从 中删除应用程序INSTALLED_APPS
  • 删除该应用程序中模型的所有数据库表(参见app_name_model_name您的数据库)。
  • 检查其他应用程序中的任何导入(可能是他们正在从该应用程序导入代码)。
  • 检查模板是否正在使用该应用程序的任何模板标签(如果该应用程序不再存在,则会产生错误)。
  • 检查您的设置文件,看看您是否没有使用该应用程序中的任何代码(例如 中的上下文处理器your_app/context_processors.py,如果它有这样的文件)。
  • 检查应用程序的任何静态内容是否在其他应用程序中使用。
  • 完全删除应用程序目录。

如果您一直遵循正确的编码原则(即,每个 Django 应用程序都是 Web 应用程序的独立部分),那么上述大多数情况都不会发生。但是当其他应用程序确实使用了该应用程序的某些部分时,您需要首先检查它,因为它可能需要在删除应用程序之前进行重构。

于 2012-07-08T11:27:55.130 回答
0

这取决于应用程序(安装方式、使用方式等),但通常您可以从中删除应用程序INSTALLED_APPS,然后删除其在数据库中的表。

于 2012-07-08T11:31:05.827 回答
0

如果在Simeon Visser解释的操作和Elias Dorneles在评论中引用的其他答案之后,在 runserver 之后你会得到这样的东西:

System check identified 1 issue (0 silenced).
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "C:\python\releases\381_x64\lib\threading.py", line 932, in _bootstrap_inner
  [...]
  File "c:\python\env\django3python381\lib\site-packages\django\db\migrations\graph.py", line 58, in raise_error
    raise NodeNotFoundError(self.error_message, self.key, origin=self.origin)
django.db.migrations.exceptions.NodeNotFoundError: Migration oeuvres.0001_initial dependencies reference nonexistent parent node ('medias', '0001_initial')

浏览到您的 appname.migrations 文件夹并评论对您要删除的应用程序的任何引用。在上述情况下,oeuvres应用程序对我要删除的medias应用程序有依赖关系,它在oeuvres.0001_initial迁移文件中定义。

我不认为/不知道这是否会对迁移过程产生影响,但我打算重置所有迁移内容以进行生产,然后导入数据,即如此处所述: https ://simpleisbetterthancomplex.com/tutorial/2016/ 07/26/how-to-reset-migrations.html

于 2020-03-28T12:55:52.633 回答