我有一个可重复使用的应用程序。在这个应用程序中,一些模型需要本地化,我正在使用django-modeltranslation应用程序。
使用django-modeltranslation导致南迁移在模型定义中包含本地化字段。
例如,我有以下型号:
class MyModel(models.Model):
name = models.CharField(...)
以下translation.py文件
class MyModelOptions(TranslationOptions):
fields = ('name',)
translator.register(MyModel, MyModelOptions)
和我的settings.py
中定义的两种语言fr和en如果我在此应用上运行南方模式迁移,则南方会将name_fr
和name_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'}),
}
据我所知,这个模型定义是由南方以硬编码方式生成的。
因此,使用django-modeltranslation很难维护可重用应用程序的南迁移,因为无法预先知道项目的settings.py中定义的语言是什么。
您建议您管理此问题?
答案 0 :(得分:1)
说实话,我根本不会将这些迁移添加到包中,不应该强迫第三方用户使用固定装置。一个很好的方法是在包中创建一个演示项目并添加适当的文档,例如(django 1.4 +)
repository_root/
example/
example/
__init__.py
urls.py
settings.py
static/
js/
fixtures/
data.json
migrations/
reusable_app/
__init__.py
0001_initial.py
manage.py
reusable_app/
models.py
urls.py
views.py
admin.py
向settings.py添加一些设置以保持清洁
def rel(*x):
return os.path.join(os.path.abspath(os.path.dirname(__file__)), *x)
FIXTURE_DIRS = (
rel('fixtures'),
)
SOUTH_MIGRATION_MODULES = {
'reusable_app': 'example.migrations.reusable_app',
}
确保在manage.py
中的导入语句后添加以下行,以确保您正在使用本地reusable_app而不是site-packages中的(已安装)
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
答案 1 :(得分:1)
我选择的选项是在制作models translation
时禁用(从INSTALLED_APPS中删除)schemamigration
并让sync_translation_fields
管理缺失翻译字段的创建。
这似乎是一种可接受的方法:https://github.com/deschler/django-modeltranslation/issues/106#issuecomment-33875679