6

私は歴史的な南部の初期移行を伴う多くのアプリケーションを持っています。これをdjango 1.5に変換したいと考えていました。そのため、移行ファイル内のすべての orm['auth.User'] 参照をカスタムのものと交換しましたが、これらの移行を実行しようとすると、次のエラーが発生します。

移行のエラー: django_notify:0001_initial KeyError: "アプリ 'profiles' のモデル 'customuser' は、この移行では使用できません。"

問題の移行はこれです: http://bpaste.net/show/2CwaYrlNifNTd5gcHUfK/

私のカスタム User クラスは次のとおりです。

class CustomUser(AbstractUser):
    image = models.ImageField(_('Image Field'), upload_to='user_images')

また、convert_to_south コマンドを使用して「プロファイル」アプリを南に変換することもできません。次のエラーが表示されます。

「/Users/tejinder/Projects/basidia/apps/profiles/migrations」にinit .py を作成しています...

  • モデル プロファイルを追加しました。CustomUser

    • プロファイルのグループに M2M テーブルを追加しました。CustomUser

    • プロファイルの user_permissions の M2M テーブルを追加しました。CustomUser

0001_initial.py を作成しました。この移行を適用できるようになりました: ./manage.py migrate profiles

CommandError: 1 つ以上のモデルが検証されませんでした: auth.user: モデルは、インストールされていないか抽象的である 'profiles.CustomUser' に交換されました。

何がうまくいかなかったのでしょうか?前もって感謝します。

4

2 に答える 2

12

この回答を参照してください: Migrating existing auth.User data to new Django 1.5 custom user model?

カスタム ユーザー モデルから始めて同様の問題が発生する可能性のある他のユーザーの場合:

「django.contrib.auth」を使用していて、カスタム ユーザー モデルを持っている場合、カスタム ユーザー モデルがインストールされたアプリに含まれていないと、syncdb を実行できません。このエラーが発生します

CommandError: 1 つ以上のモデルが検証されませんでした: auth.user: モデルは、インストールされていないか抽象的である 'myapp.User' に交換されました。admin.logentry: 'user' はモデル myapp.User と関係がありますが、これはインストールされていないか抽象的です。

そのため、ユーザー モデルを含むアプリをインストール済みアプリに含める必要があることを修正するには、syncdb を実行すると、独自のモデルのすべてのテーブルが追加されます。したがって、テーブルは既に作成されているため、アプリを南に変換する必要があります。

python manage.py syncdb
python manage.py migrate
python manage.py convert_to_south myapp

これにより 0001_initial が作成され、次のエラーが発生します。

CommandError: 1 つ以上のモデルが検証されませんでした: auth.user: モデルは、インストールされていないか抽象的である 'myapp.User' に交換されました。

回避策:

python manage.py syncdb
python manage.py migrate
python manage.py convert_to_south myapp
python manage.py migrate myapp 0001 --fake

convert_to_south を実行すると上記のエラーが表示されますが、今のところ無視してかまいませんサウスのドキュメントには次のように書かれています。

convert_to_south: South は自動的に作成し、最初の移行を適用するふりをします

問題は、モデルの検証により、最初の移行を適用するふりをする (--fake) 前に、convert_to_south がエラーになることだと思います。

したがって、回避策は基本的に、スキップされた偽の移行を行うことです。

于 2013-02-26T19:31:36.263 に答える
0

先日、この同じ問題を解決したので、他の人がこれを役に立つと思うかもしれません. これは、South が Django 1.5+ と互換性を持つ前に移行が作成された場合に発生します。Django サイトで PybbM Forum App を使用すると、同様の問題が発生しました。解決策は、モデルと関連モデルを古い移行 ORM に含めることです。これを行うには、次の 2 つの方法があります。

1)失敗した各移行ファイルの下部にある「モデル」リストにモデルを手動で入力できます。2) 既存の移行の 1 つをテンプレートとして使用し、目的の orm モデルを最後にコピーします。

例: http://bpaste.net/show/Pv20CM5dTrbubzFZtiRY/

* カスタム ユーザーが必要とする可能性のある関連モデルもコピーする必要があることに注意してください。 ' および 'schools.school'

于 2013-08-22T16:59:48.733 に答える