3

python manage.py syncdb; python manage.py migrate --all新しいデータベースで実行すると中断する南部の移行を実行しています。ただし、 2回実行すると問題なく通過します!最初の試みで、私は得る

DoesNotExist: ContentType matching query does not exist. Lookup parameters were {'model': 'mymodel', 'app_label': 'myapp'}

失敗した後、私はデータベースに行きますselect * from django_content_typeが、確かにそれは十分です

13 | my model     | myapp      | mymodel  

次に、移行を実行するpython manage.py syncdb; python manage.py migrate --allと動作します!

では、どうすれば 2 回目でしか機能しない移行を行うことができたのでしょうか? ちなみに、これは適切なグループを管理アプリに入れるデータ移行です。移行内の次の方法はそれを壊しています:

@staticmethod
def create_admin_group(orm, model_name, group_name):
    model_type = orm['contenttypes.ContentType'].objects.get(app_label='myapp', model=model_name.lower())
    permissions = orm['auth.Permission'].objects.filter(content_type=model_type)
    group = orm['auth.Group']()
    group.name = group_name
    group.save()
    group.permissions = permissions
    group.save()

(移行ファイルは既存の作業プロジェクトから取得されます。つまり、ずっと前に schemamigration --initial を実行していたことを意味します。データベース スキーマと初期データを新しいデータベースに複製しようとしているだけです。)

4

3 に答える 3

3

これは南部のバグであることがわかりました。

http://south.aeracode.org/ticket/1281

于 2013-07-18T14:31:31.693 に答える
1

python manage.py syncdb; python manage.py migrate --all初めて発行するのは悪い習慣です。--allまず第一に、私はオプションをあまり信用しません。Django の公式ライブラリが含まれている可能性があり、それらに移行するものが何もない場合でも、確かにそれは望ましくありません。むしろ通り過ぎますpython manage.py migrate <app_name1> <app_name2> ...

しかし、南が懸念することについては、南を使用する方法は次のとおりです。

  1. アプリを作成する
  2. そのための移行を作成しますpython manage.py schemamigration --initial <app>
  3. 南に変換し、既存の移行python manage.py convert_to_south <app> --auto
  4. アプリにいくつかの変更を加えてから、python manage.py migrate <app>

migrate --allあなたのアプローチは実際には機能するかもしれませんが、適用される移行の順序を制御せず、その時点で (myapp、mymodel) へのアクセスが利用可能であることをpython manage.py syncdb保証しないことを考慮してください。contentType

移行が実際に 1 回適用されている可能性があるため、エラーは初回のみ表示されます。south_migrationhistoryそして、すでに適用されているようにテーブルに保存されるため、コマンドを再度発行すると無視されます。

syncdb私のアドバイスは、コマンドの後、最初にターゲットアプリを移行することです。これが機能しない場合、または物事が面倒な場合は、次のことを試してください。

  1. 'south',の行にコメントを付けますINSTALLED_APPS
  2. 問題python manage.py syncdb
  3. #'south',ラインインからコメントを削除INSTALLED_APPS
  4. 最後のコマンドを発行するpython manage.py migrate --all

頑張ってください、これが役に立てば幸いです!

于 2013-07-17T21:12:57.057 に答える