1. ホーム
  2. python

[解決済み】Djangoアプリの名前を変更する方法は?

2022-04-15 16:49:49

質問

Django のアプリのフォルダ、インポート、すべての参照 (templates/indexes) の名前を変更して、アプリの名前を変更しました。しかし、現在、以下を実行しようとすると、このエラーが表示されます。 python manage.py runserver

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

このエラーをデバッグして解決するにはどうしたらいいですか?何か手がかりはありますか?

解決方法を教えてください。

Django でアプリの名前を変更するには、以下の手順に従います。

  1. プロジェクトルートにあるフォルダの名前を変更します。
  2. 依存関係にあるアプリへの参照をすべて変更する、つまり、アプリの views.py , urls.py , manage.py および settings.py ファイルを作成します。
  3. データベーステーブルを編集する django_content_type を次のコマンドで実行します。 UPDATE django_content_type SET app_label='<NewAppName>' WHERE app_label='<OldAppName>'
  4. また、モデルがある場合、モデルテーブルの名前を変更する必要があります。postgres の場合は ALTER TABLE <oldAppName>_modelName RENAME TO <newAppName>_modelName . mysqlの場合も同じだと思います(@null_radixさんがおっしゃっています)。
  5. (Django >= 1.7 の場合) アップデートしてください。 django_migrations テーブルを使用して、以前のマイグレーションが再実行されないようにします。 UPDATE django_migrations SET app='<NewAppName>' WHERE app='<OldAppName>' . 備考 : この手順が Django 1.8+ に必要かどうか (コメントで) 議論されています; 確実に知っている人がいたら、ここで更新してください。
  6. もし、あなたの models.py のメタクラスは app_name がリストされているので、これも必ずリネームしてください (@will が言っていました)。
  7. を名前空間化した場合 static または templates フォルダを作成した場合は、それらの名前も変更する必要があります。たとえば、次のように名前を変更します。 old_app/static/old_appnew_app/static/new_app .
  8. djangoのリネーム用 models を変更する必要があります。 django_content_type.name のエントリをDBに登録します。PostgreSQLの場合は UPDATE django_content_type SET name='<newModelName>' where name='<oldModelName>' AND app_label='<OldAppName>'
  9. 2021年7月16日更新 : また __pycache__/ フォルダを削除してください。 EOFError: marshal data too short when trying to run the server . 言及者:@Serhii Kushchenko

メタポイント(virtualenvを使用する場合)。 注意すべきは、virtualenv を含むディレクトリの名前を変更する場合、 env の中に絶対パスを含むファイルがいくつかあり、それも更新する必要があることです。もし、以下のようなエラーが発生した場合は ImportError: No module named ... が原因かもしれません。(これを提供してくれた @danyamachine に感謝します)。

その他の参考文献 また、以下のリンクも参考にしてください。

  1. DjangoとSouthでアプリの名前を変更する
  2. あるdjangoアプリから新しいアプリにモデルを移行するにはどうしたらいいですか?
  3. Django アプリの名前を変更するには?
  4. Django Southによる後方移行
  5. Django/South を使ってモデル名を変更する最も簡単な方法とは?
  6. Pythonコード (おかげさまで A.Raouf ) を使って、上記の手順を自動化することができます (未試験のコードです。警告されています!)。
  7. Pythonコード (おかげさまで ラファポニーマン ) を使って、上記の手順を自動化することができます (未試験のコードです。警告されています!)。