如何更改Django应用程序的名称?

我在Django中更改了一个应用程序的名称,重命名了它的文件夹、导入和所有引用(模板/索引)。但是现在,当我尝试运行python manage.py runserver

错误:无法导入设置“NameOfMyneApp.settings”(是否在系统路径上?):没有名为settings的模块

如何调试和解决此错误?有什么线索吗

按照以下步骤在Django中更改应用程序的名称:

  1. 重命名项目根目录中的文件夹
  2. 更改应用程序依赖项中对应用程序的任何引用,即应用程序的视图.pyURL.py管理.py设置.py文件
  3. 使用以下命令编辑数据库表django\u content\u typeUPDATE django\u content\u type SET app\u label='<NewAppName>'其中app_label='<OldAppName>'
  4. 此外,如果有模型,则必须重命名模型表。对于postgres,使用altertable<oldAppName&gt_modelName重命名为<newAppName&gt_型号名称。对于mysql,我认为也是一样的(正如@null_radix所提到的)
  5. (对于Django>=1.7)更新Django_迁移表以避免重新运行以前的迁移:Update Django_迁移集app=”<NewAppName>'其中app='<OldAppName>'注意:如果Django 1.8+需要此步骤,则存在一些争论(在评论中);如果有人确实知道,请在此更新
  6. 如果您的models.py的元类已列出app\u name,请确保也重命名该类(由@will提及)
  7. 如果您已经在应用程序中为静态模板文件夹命名了名称空间,您还需要重命名这些文件夹。例如,将old_app/static/old_app重命名为new_app/static/new_app
  8. 要重命名djangomodels,您需要更改数据库中的django\u content\u type.name条目。对于postgreSQL,使用updatedjango\u content\u type SET name=”<newModelName>'其中name='<oldModelName>'和应用程序标签='<OldAppName>'
  9. 更新2021年7月16日:此外,必须删除应用程序中的\uuuuu pycache\uuuu/文件夹,否则您在尝试运行服务器时会得到eoferor:marshal数据太短。由@Serhii Kushchenko提及

元点(如果使用virtualenv):值得注意的是,如果您正在重命名包含virtualenv的目录,则环境中可能有多个文件包含绝对路径,也需要更新。如果您遇到诸如ImportError:No module named…之类的错误,这可能是罪魁祸首。(感谢@danyamachine提供此功能)

其他参考资料:您可能还需要参考以下链接以获得更完整的图片:

  1. 使用Django和South重命名应用程序
  2. 如何将模型从一个django应用程序迁移到一个新应用程序中
  3. 如何更改Django应用程序的名称
  4. 与Django South的向后迁移
  5. 使用Django/South重命名模型的最简单方法
  6. Python代码(感谢A.Raouf)自动执行上述步骤(未经测试的代码。您已收到警告!)
  7. Python代码(感谢rafaponieman)自动执行上述步骤(未经测试的代码。您已收到警告!)

发表评论