我已经通过重命名其文件夹,导入及其所有引用(模板/索引)来更改Django中应用程序的名称.但是现在我尝试运行时遇到了这个错误python manage.py runserver
Error: Could not import settings 'nameofmynewapp.settings' (Is it on sys.path?): No module named settings
Run Code Online (Sandbox Code Playgroud)
如何调试并解决此错误?有线索吗?
Sri*_*aju 245
按照以下步骤更改Django中的应用程序名称:
views.py,urls.py"manage.py",和settings.py文件.django_content_type使用以下命令编辑数据库表:UPDATE django_content_type SET app_label='<NewAppName>' WHERE app_label='<OldAppName>' ALTER TABLE <oldAppName>_modelName RENAME TO <newAppName>_modelName.对于mysql我也认为它是相同的(如@null_radix所提到的)django_migrations表以避免重新运行先前的迁移:UPDATE django_migrations SET app='<NewAppName>' WHERE app='<OldAppName>'.注意:如果Django 1.8+需要此步骤,则存在一些争论(在评论中); 如果有人确切知道请在这里更新.models.py的元类已app_name列出,请确保也重命名(由@will提及).static或templates文件夹命名为,则还需要重命名.例如,重命名old_app/static/old_app为new_app/static/new_app.models,您需要更改django_content_type.nameDB中的条目.对于postgreSQL使用UPDATE django_content_type SET name='<newModelName>' where name='<oldModelName>' AND app_label='<OldAppName>'Meta点(如果使用virtualenv):值得注意的是,如果你重命名包含virtualenv的目录,你的env中可能会有几个包含绝对路径的文件,并且还需要更新.如果你遇到这样的错误ImportError: No module named ...可能是罪魁祸首.(感谢@danyamachine提供此功能).
其他参考:您可能还想参考以下链接以获得更完整的图片
all*_*aps 30
Django 1.7中的新功能是一个应用程序注册表,用于存储配置并提供内省.这个机器让你改变几个应用程序属性.
我想说的重点是,并不总是需要重命名应用程序:通过应用程序配置,可以解决冲突的应用程序.但如果您的应用需要友好命名,那么还有其他方法.
作为一个例子,我想命名我的民意调查应用程序'来自用户的反馈'.它是这样的:
apps.py在polls目录中创建一个文件:
from django.apps import AppConfig
class PollsConfig(AppConfig):
name = 'polls'
verbose_name = "Feedback from users"
Run Code Online (Sandbox Code Playgroud)
将默认应用配置添加到您的polls/__init__.py:
default_app_config = 'polls.apps.PollsConfig'
Run Code Online (Sandbox Code Playgroud)
有关更多应用配置:https://docs.djangoproject.com/en/1.7/ref/applications/
Maz*_* Mk 10
如果您使用PyCharm并且项目在重命名后停止工作:
好玩的问题!我很快将不得不重命名许多应用程序,所以我做了一次试运行。
通过此方法,可以在原子步骤中取得进展,以最大程度地减少对正在重命名的应用程序上工作的其他开发人员的干扰。
有关有效的示例代码,请参见此答案底部的链接。
name和label为默认值)。INSTALLED_APPS。db_table为当前值。db_table“总是”被明确定义。更改应用标签:
label在应用程序配置中设置为新的应用程序名称。<app_label>/<model_name>_<suffix>.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';
Run Code Online (Sandbox Code Playgroud)确保不需要迁移(请检查上一步)。
db_table。makemigrations以便django可以将表重命名为“默认”。name。INSTALLED_APPS引用应用程序配置的位置。INSTALLED_APPS。示例解决方案:我创建了app-rename-example这个示例项目,您可以在其中查看如何重命名应用,一次提交一次。
该示例使用Python 2.7和Django 1.8,但我相信同一过程至少可以在Python 3.6和Django 2.1上运行。
在许多情况下,我相信@allcaps 的回答很有效。
但是,有时需要实际重命名应用程序,例如提高代码可读性或防止混淆。
大多数其他答案涉及手动数据库操作或修补现有迁移,我不太喜欢这些。
作为替代方案,我喜欢创建一个具有所需名称的新应用程序,复制所有内容,确保其正常工作,然后删除原始应用程序:
使用所需名称启动一个新应用程序,并将原始应用程序中的所有代码复制到该应用程序中。确保在新复制的代码中修复命名空间的内容,以匹配新的应用程序名称。
makemigrations和migrate。注意:如果应用程序有很多外键,则在尝试为复制的应用程序运行初始迁移时,可能会出现反向访问器冲突的问题。您必须重命名旧应用程序上的 related_name 访问器(或添加新访问器)以解决冲突。
创建一个数据迁移,将相关数据从原始应用程序的表复制到新应用程序的表中,然后migrate再复制一次。
此时,一切仍然有效,因为原始应用程序及其数据仍然存在。
现在你可以重构所有的依赖代码,所以它只使用新的应用程序。有关需要注意的事项的示例,请参阅其他答案。
一旦确定一切正常,您就可以删除原始应用程序。这涉及另一个(架构)迁移。
这样做的好处是每一步都使用正常的Django迁移机制,无需手动操作数据库,我们可以在源代码控制中跟踪所有内容。此外,我们会保留原始应用程序及其数据,直到我们确定一切正常。
| 归档时间: |
|
| 查看次数: |
90466 次 |
| 最近记录: |