Skip to main content
 首页 » 编程设计

python之ModelTranslation、Django 管理和小部件

2024年10月25日33zhoujg

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