6

いくつかのモデルをあるDjangoアプリから別のアプリに移行しようとしていますが、この質問に基づいて、モデルを1つのdjangoアプリから新しいアプリに移行するにはどうすればよいですか?私はそれをかなり機能させましたが、最初の移行を作成するときにこのエラーが発生します:

"The model 'contenttype' from the app 'contenttypes' is not available in this migration."

グーグルとSOはこれが起こったケースを見つけていないようで、前述の質問には、コード内のコメントを除いて、それについて具体的に言うことは何もありません。

if not db.dry_run:
    # For permissions to work properly after migrating
    orm['contenttypes.contenttype'].objects.filter(app_label='common', model='cat').update(app_label='specific')

私が間違っていることについての洞察を本当に感謝します。

2つの移行ファイルは次のとおりです。

作成:

# encoding: utf-8
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models

class Migration(SchemaMigration):

    def forwards(self, orm):
        db.rename_table('cars_country', 'general_country')
        if not db.dry_run:
            # For permissions to work properly after migrating
            orm['contenttypes.ContentType'].objects.filter(app_label='cars', model='country').update(app_label='general')

    def backwards(self, orm):
        pass

消去:

# encoding: utf-8
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models

class Migration(SchemaMigration):

    depends_on = (
        ('general', '0002_create_country'),
    )

    def forwards(self, orm):

        db.alter_column('cars_club', 'country_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['general.Country'], null=True))


    def backwards(self, orm):

        db.rename_table('general_country', 'cars_country')
        db.alter_column('cars_club', 'country_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['cars.Country'], null=True))
4

1 に答える 1

4

わかりました、解決策を見つけました。dgel からのフリーズ通知により、South のドキュメントを確認したところ、ORM の移行に関する通知がありました。これは、すべての移行の下部にあるモデルと呼ばれる大きな辞書にモデルをシリアル化することによって実現されます。見やすいです。それは、下部にある密集したコードの大きな塊です。

したがって、基本的には、orm['contenttypes.contenttype] を 2 番目の移行ファイルに移動する必要がありました。コンテンツ タイプ モデルの辞書が既に存在していたからです。そして今、すべてが正常に機能しているようです。

于 2012-11-28T12:21:53.713 に答える