ModelTranslation,Django Admin和Widgets

时间:2014-09-12 10:30:43

标签: python django python-3.x django-modeltranslation

我正在使用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

1 个答案:

答案 0 :(得分:2)

请注意正确覆盖formfield_for_dbfield课程的ModelAdmin方法。您似乎错过了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)