2014-09-12 3 views
2

Я использую django-modeltranslation для перевода одной из моих моделей. На данный момент все нормально, за исключением того, что мой предыдущий виджет больше не работает. Пробовал много вещей, в том числе это:ModelTranslation, Django Admin и Widgets

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, который использует modeltranslation ... Спасибо! :)

Использование Django == 1.6.7 и Джанго-modeltranslation == 0.7.3

ответ

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) 
Смежные вопросы