模型翻译、Django Admin 和小部件

2 投票
1 回答
588 浏览
提问于 2025-04-21 07:02

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

根据django-modeltranslation的文档,这是处理这种情况的正确方法。

我并不是在寻求解决我自己问题的办法,因为我觉得可能是我自己代码中的某些地方出了问题。我只是想要一个在django管理后台中使用modeltranslation的字段控件的例子……谢谢! :)

使用的Django版本是1.6.7,django-modeltranslation版本是0.7.3

1 个回答

2

注意要正确地重写你在 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)

撰写回答