3

私はいくつかのdjangoアプリケーションを持っています:

INSTALLED_APPS = (
    'geonode.exposure',
    'geonode.isc_viewer',
    'geonode.geodetic',
    'geonode.observations',
    'geonode.ged4gem',

で1つを除いてすべてを管理する必要がありますsyncdb。どうすればsyncdb意図的にgeonode.exposureアプリケーションをスキップできますか?

更新: 完全な構成については説明しませんでした。詳しく説明します。サウスを使用して、公開を除くすべてのアプリのデータベースの移行とフィクスチャを管理しています。エクスポージャーアプリは外部データベースにアクセスしており、ルーターを使用してアクセスしています(これが、syncdbによってスキップされるようにする理由です)。私のルーター設定は次のようになります。

class GedRouter(object):
    def db_for_read(self, model, **hints):
        "Point all operations on ged models to 'geddb'"
        if model._meta.app_label == 'exposure':
            return 'geddb'
        return 'default'

    def allow_syncdb(self, db, model):
        if db == 'geddb' or model._meta.app_label == "ged":
            return False # we're not using syncdb on our legacy database
        else: # but all other models/databases are fine
            return True

南はallow_syncdbメソッドを尊重していませんか?移行がないため、露出アプリで南にsyncbdを実行していますか?

4

3 に答える 3

5

managed = FalseモデルのMetaクラスで使用できます。このように、syncdbはアプリのテーブルを作成しません。ドキュメントの詳細については。

于 2013-01-30T14:09:46.400 に答える
1

わかりました、これはあなたが直接求めているものではありませんが、Southhttp://south.aeracode.orgの使用を検討してください

移行するモデルのバージョンなどを含めるアプリを決定できます。ここで解決策が必要なようです。

于 2013-01-31T00:17:16.227 に答える
1

モデルメタオプション「管理対象」があります。詳細については、djangoのドキュメントを確認してください。

https://docs.djangoproject.com/en/dev/ref/models/options/#managed

于 2013-01-30T14:10:41.270 に答える