gpt4 book ai didi

python - 如何使用 django-modeltranslation 正确管理可重用应用程序的南迁移?

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:24 25 4
gpt4 key购买 nike

我有一个可重用的应用程序。在此应用中,一些模型需要本地化,我为此使用了 django-modeltranslation 应用。

使用 django-modeltranslation 导致向南迁移在模型定义中包含本地化字段。

例如,我有以下模型:

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

还有下面的translation.py文件

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

translator.register(MyModel, MyModelOptions)

还有两种语言,fr 和 en,在我的 settings.py 中定义

如果我在此应用程序上运行 south schemamigration,south 会将 name_frname_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 以硬编码的方式生成的。

因此,很难使用 django-modeltranslation 维护可重用应用程序的南迁移,因为无法提前知道项目的 settings.py 中定义的语言是什么。

您会推荐什么来解决这个问题?

最佳答案

老实说,我根本不会将这些迁移添加到包中,不应该将固定装置强加给第 3 方用户。一个不错的方法是在包中创建一个演示项目并添加适当的文档,例如(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 中的导入语句之后添加以下行,以确保您使用的是本地可重用应用程序,而不是站点包中的(已安装)应用程序

sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

关于python - 如何使用 django-modeltranslation 正确管理可重用应用程序的南迁移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16485167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com