2

再利用可能なアプリケーションがあります。このアプリでは、一部のモデルをローカライズする必要があり、そのために django-modeltranslation アプリを使用しています。

django-modeltranslation を使用すると、サウス マイグレーションでモデル定義にローカライズされたフィールドが含まれるようになります。

たとえば、次のモデルがあります。

class MyModel(models.Model):
    name = models.CharField(...)

そして、次の translation.py ファイル

class MyModelOptions(TranslationOptions):
   fields = ('name',)

translator.register(MyModel, MyModelOptions)

私のsettings.pyで定義された2つの言語、frとen

このアプリで South schemamigration を実行すると、south はname_frandname_enフィールドを移行のモデル定義に追加します。

class Migration(SchemaMigration):

    def forwards(self, orm):
         #Here the columns are created depending but It can be managed for all languages in settings.LANGUAGES
         for (lang, _x) in settings.LANGUAGES:
             #create the column for the language


def backwards(self, orm):
         #Simimar workaround than forwards can be implemented

models = {
    'myapp.mymodel': {
        'Meta': {'object_name': 'MyModel'},
        'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
        'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),

        #The following items are the model definition and can not be generated from settings.LANGUAGES
        'name_en': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
        'name_fr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
    }

私の知る限り、このモデル定義は、south によってハードコーディングされた方法で生成されます。

結果として、プロジェクトの settings.py で定義されている言語を事前に知る方法がないため、django-modeltranslation を使用して再利用可能なアプリの南への移行を維持することは困難です。

この問題を管理するために何をお勧めしますか?

4

2 に答える 2

1

models translation私が選択したオプションは、作成時に無効にする ( INSTALLED_APPS から削除する)ことであり、不足している翻訳フィールドの作成を管理schemamigrationさせます。sync_translation_fields

許容できる方法のようです: https://github.com/deschler/django-modeltranslation/issues/106#issuecomment-33875679

于 2014-01-28T10:43:25.373 に答える