当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何更改Django应用程序的名称?》经验,为你挑选了4个好方法。

我已经通过重命名其文件夹,导入及其所有引用(模板/索引)来更改Django中应用程序的名称.但是现在我尝试运行时遇到了这个错误python manage.py runserver

Error: Could not import settings 'nameofmynewapp.settings' (Is it on sys.path?): No module named settings

如何调试并解决此错误?有线索吗?



1> Srikar Appal..:

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

    重命名项目根目录中的文件夹

    更改为您的应用程序的任何引用他们的依赖关系,即应用程序的views.py,urls.py"manage.py",和settings.py文件.

    django_content_type使用以下命令编辑数据库表:UPDATE django_content_type SET app_label='' WHERE app_label=''

    此外,如果您有模型,则必须重命名模型表.适合postgres使用ALTER TABLE _modelName RENAME TO _modelName.对于mysql我也认为它是相同的(如@null_radix所提到的)

    (对于Django> = 1.7)更新django_migrations表以避免重新运行先前的迁移:UPDATE django_migrations SET app='' WHERE app=''.注意:如果Django 1.8+需要此步骤,则存在一些争论(在评论中); 如果有人确切知道请在这里更新.

    如果您models.py的元类已app_name列出,请确保也重命名(由@will提及).

    如果您已将应用程序中的文件夹statictemplates文件夹命名为,则还需要重命名.例如,重命名old_app/static/old_appnew_app/static/new_app.

    要重命名django models,您需要更改django_content_type.nameDB中的条目.对于postgreSQL使用UPDATE django_content_type SET name='' where name='' AND app_label=''

Meta点(如果使用virtualenv):值得注意的是,如果你重命名包含virtualenv的目录,你的env中可能会有几个包含绝对路径的文件,并且还需要更新.如果你遇到这样的错误ImportError: No module named ...可能是罪魁祸首.(感谢@danyamachine提供此功能).

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

    用Django和South重命名应用程序

    如何将模型从一个django应用程序迁移到一个新的应用程序?

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

    与Django South向后迁移

    使用Django/South重命名模型的最简单方法?

    Python代码(感谢A.Raouf)自动执行上述步骤(未经测试的代码.您已收到警告!)

    Python代码(感谢rafaponieman)自动执行上述步骤(未经测试的代码.您已收到警告!)


如果您正在使用新迁移,则需要在现有迁移文件和django_migrations表中更改应用名称.首先压缩迁移可能会更好,因此编辑的次数较少.
对于Postgres,如果要重命名序列,则使用`ALTER SEQUENCE _ _ _seq RENAME TO _ _ _seq;`.虽然没有必要,但系统本身并不关心名称.列DEFAULT存储一个`OID`(`'foo_pkey_seq':: regclass`),您可以更改序列的名称而不会破坏它 - OID保持不变.
此外,如果您有模型,则必须重命名模型表.对于postgres使用`ALTER TABLE _modelName RENAME TO _modelName`
如果你更新你的答案以包括詹姆斯关于升级迁移**文件**(例如依赖模块名称)的内容,那将是很好的......无法解决这个问题.
这是一个管理命令,允许根据@ SrikarAppalaraju的解决方案进行模型重命名:https://gist.github.com/rafaponieman/201054ddf725cda1e60be3fe845850a5它接受old_name,new_name和类作为参数(所有格式都在数据库表和字段上查看) .

2> allcaps..:

Django 1.7中的新功能是一个应用程序注册表,用于存储配置并提供内省.这个机器让你改变几个应用程序属性.

我想说的重点是,并不总是需要重命名应用程序:通过应用程序配置,可以解决冲突的应用程序.但如果您的应用需要友好命名,那么还有其他方法.

作为一个例子,我想命名我的民意调查应用程序'来自用户的反馈'.它是这样的:

apps.pypolls目录中创建一个文件:

from django.apps import AppConfig

class PollsConfig(AppConfig):
    name = 'polls'
    verbose_name = "Feedback from users"

将默认应用配置添加到您的polls/__init__.py:

default_app_config = 'polls.apps.PollsConfig'

有关更多应用配置:https://docs.djangoproject.com/en/1.7/ref/applications/



3> Maziyar Mk..:

如果您使用PyCharm并且项目在重命名后停止工作:

    编辑运行/调试配置并更改环境变量DJANGO_SETTINGS_MODULE,因为它包含您的项目名称.

    转到设置/语言和框架/ Django并更新设置文件位置.



4> meshy..:

好玩的问题!我很快将不得不重命名许多应用程序,所以我做了一次试运行。

通过此方法,可以在原子步骤中取得进展,以最大程度地减少对正在重命名的应用程序上工作的其他开发人员的干扰。

有关有效的示例代码,请参见此答案底部的链接。

    准备移动的现有代码

    创建一个应用程序配置(设置namelabel为默认值)。

    将应用程序配置添加到中INSTALLED_APPS

    在所有模型上,将其显式设置db_table为当前值。

    医生迁移,因此db_table“总是”被明确定义。

    确保不需要迁移(请检查上一步)。

    更改应用标签

    label在应用程序配置中设置为新的应用程序名称。

    更新迁移和外键以引用新的应用标签。

    更新基于类的通用视图的模板(默认路径为/_.html

    运行原始SQL来修复迁移和content_types应用(不幸的是,某些原始SQL是不可避免的)。您不能在迁移中运行它。

    UPDATE django_migrations
       SET app = 'catalogue'
     WHERE app = 'shop';
    
    UPDATE django_content_type
       SET app_label = 'catalogue'
     WHERE app_label = 'shop';
    

    确保不需要迁移(请检查上一步)。

    重命名表

    删除“ custom” db_table

    运行,makemigrations以便django可以将表重命名为“默认”。

    移动文件

    重命名模块目录。

    修复导入。

    更新应用程序的配置name

    更新INSTALLED_APPS引用应用程序配置的位置。

    整理

    如果不再需要自定义应用程序配置,请删除它。

    如果应用程序配置消失了,别忘了也将其从中删除INSTALLED_APPS


示例解决方案:我创建了app-rename-example这个示例项目,您可以在其中查看如何重命名应用,一次提交一次。

该示例使用Python 2.7和Django 1.8,但我相信同一过程至少可以在Python 3.6和Django 2.1上运行。

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有