我正在使用 django-modeltranslation 来翻译我的一个模型。现在一切都很好,除了我以前的小部件不再工作了。它尝试了很多东西,包括这个:
class EmailTemplateAdmin(admin.ModelAdmin):
def formfield_for_dbfield(self, db_field, **kwargs):
if db_field.name == 'body':
kwargs['body'] = TinyMCE(attrs={'cols': 80, 'rows': 30})
return db_field.formfield(**kwargs)
return super(EmailTemplateAdmin, self).formfield_for_dbfield(db_field, **kwargs)
class TranslatedEmailTemplateAdmin(EmailTemplateAdmin, TabbedTranslationAdmin):
def formfield_for_dbfield(self, db_field, **kwargs):
field = super(TranslatedEmailTemplateAdmin, self).formfield_for_dbfield(db_field, **kwargs)
self.patch_translation_field(db_field, field, **kwargs)
return field
根据documentation of django-modeltranslation关于这种情况,这是执行此操作的正确方法。
我不是在为我自己的问题寻求解决方案,因为我猜它可能是我自己的代码中的某些东西破坏了它。我只想举一个在 django admin 中使用模型翻译的字段上使用小部件的示例...谢谢! :)
使用 Django == 1.6.7 和 django-modeltranslation==0.7.3
请您参考如下方法:
注意不要正确覆盖 ModelAdmin 类的 formfield_for_dbfield 方法。看起来你错过了 kwargs.pop('request', None) 并且混淆了 kwargs['widget'] 和 kwargs['body']
这里是重写的方法:
def formfield_for_dbfield(self, db_field, **kwargs):
if db_field.name == 'body':
kwargs.pop('request', None)
kwargs['widget'] = TinyMCE(attrs={'cols': 80, 'rows': 30})
return db_field.formfield(**kwargs)
return super(EmailTemplateAdmin, self).formfield_for_dbfield(db_field, **kwargs)
