Django Modeltranslation:TranslationAdmin 类未复制正确的小部件
Posted
技术标签:
【中文标题】Django Modeltranslation:TranslationAdmin 类未复制正确的小部件【英文标题】:Django Modeltranslation: TranslationAdmin class does not copy the correct widget 【发布时间】:2018-07-19 03:56:05 【问题描述】:我正在为带有翻译字段的 django 管理模型使用自定义表单。但是没有使用表单的小部件。我的代码:
models.py
class Fact(models.Model):
heading = models.CharField(max_length=200)
翻译.py
class FactTranslationOptions(TranslationOptions):
fields = ('heading')
translator.register(Fact, FactTranslationOptions)
admin.py
class FactForm(forms.ModelForm):
class Meta:
model = Fact
widgets =
'heading': forms.Textarea
class FactAdmin(translationadmin.TranslationAdmin):
form = FactForm
admin.site.register(Fact, FactAdmin)
使用此代码,字段标题不会显示为 textarea。这是一个默认输入字段。
当我将 FactForm 更改为:
class FactForm(ProductDataInlineFormBase):
class Meta:
model = Fact
widgets =
'heading_de': forms.Textarea,
'heading_en': forms.Textarea
使用了 textarea 小部件。
我做错了什么,或者这是 django 模型翻译中的错误?
【问题讨论】:
【参考方案1】:在解决此问题之前我的解决方法:
def helper_get_translated_widgets(field_names, widget):
widgets =
for name in field_names:
for key, value in settings.LANGUAGES:
widgets["_".format(name, key)] = widget
return widgets
class FactForm(ProductDataInlineFormBase):
class Meta:
model = Fact
widgets =
**helper_get_translated_widgets(["text"], TinyMCE(mce_attrs=settings.TINYMCE_TABLE_CONFIG)),
**helper_get_translated_widgets(["heading"], forms.Textarea),
【讨论】:
以上是关于Django Modeltranslation:TranslationAdmin 类未复制正确的小部件的主要内容,如果未能解决你的问题,请参考以下文章
对于在Django中使用modeltranslation翻译的字段,如何在upload_to方法中获取FileField的字段名?