私はPython 3.3とDjango 1.9を使用しています。私は私のDjangoのモデルに多言語サポートを実装する必要があるので、私は重複フィールドを作成することを決めた - 例えば:Django動的モデル作成。フィールドが衝突しています
class Header:
ua_title = models.CharField(max_length=100)
ru_title = models.CharField(max_length=100)
en_title = models.CharField(max_length=100)
ua_subtitle = models.CharField(max_length=100)
ru_subtitle = models.CharField(max_length=100)
en_subtitle = models.CharField(max_length=100)
私は多くの分野で、このような多くのモデルを持っているので、私はそれらを動的に作成することを決めました。私は下の関数を書いた:
def create_language_dependent_model(model_name: str, attrs: dict) -> models.Model:
DEFAULT_LANGS = ('ua', 'ru', 'en')
result_attrs = {
'__module__': 'app.models'
}
for attribute_name, options in attrs.items():
if options.get('isLanguageDependent'):
for lang in DEFAULT_LANGS:
result_attrs[lang + "_" + attribute_name] = options.get('field_type')
else:
result_attrs[attribute_name] = options.get('field_type')
return type(
model_name, (models.Model,), result_attrs
)
そして、私はこのようなモデルを作成:
Header = create_language_dependent_model("Header", {
attr_name: {'isLanguageDependent': True, 'field_type': models.CharField(max_length=100)}
for attr_name in ('title', 'subtitle')
})
しかし、私はmakemigrations
を実行しようとすると、私は次のエラーを取得:
....
app.Header.ru_title: (models.E006) The field 'ru_title' clashes with the field 'ru_title' from model 'app.header'.
app.Header.ru_title: (models.E006) The field 'ru_title' clashes with the field 'ru_title' from model 'app.header'.
app.Header.en_title: (models.E006) The field 'en_title' clashes with the field 'en_title' from model 'app.header'.
app.Header.en_title: (models.E006) The field 'en_title' clashes with the field 'en_title' from model 'app.header'.
....
このような場合、私はそのモデルのインスタンスをデータベースに作成する必要がありますが、実際のモデルでは "共通"フィールドはすべてのインスタンスで同じになりますが、その多くはImageFieldとFileFieldですが、CharFieldsの重複がファイルやイメージの複製より優れていると思います。しかし、あなたのポイントは良いです、ありがとう – parikLS