Я использую django-translations для перевода некоторых полей моей модели. Используя Django Admin, я могу вводить переводы, и форма во внешнем интерфейсе показывает соответствующие значения языка.
Но я хочу показать одно поле для каждого языка"похожее" на Django Adminза исключением того, что я не хочу вручную добавлять поля для непереведенных языков.
Так что, если у меня есть языки en (default)
и de
, я хочу вывести title
или title_en
и title_de
как поля.
Я пытался добавить поля перевода самостоятельно, например, title_de
к модели, макету и мета-классу, но это не сработало.
Как показать всеполя для разных языков одновременно?
Модель
class Category(Translatable, MPTTModel):
title = models.CharField(max_length=200)
slug = models.SlugField()
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
class Meta:
# enforcing that there can not be two categories under a parent with same slug
unique_together = ('slug', 'parent',)
class MPTTMeta:
order_insertion_by = ['title']
class TranslatableMeta:
fields = ['title', 'slug']
Форма
class CategoryForm(forms.ModelForm):
use_required_attribute = False
title = forms.CharField(max_length=200)
slug = forms.SlugField(help_text=_('Will be generated automatically from the title'))
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.form_method = 'post'
self.helper.form_action = '.'
self.helper.form_class = 'form-horizontal form-bordered'
self.helper.label_class = 'col-lg-3'
self.helper.field_class = 'col-lg-8'
self.helper.layout = self.__get_layout()
super().__init__(*args, **kwargs)
self.fields['title'].required = True
self.fields['slug'].required = True
@staticmethod
def __get_layout():
layout = Layout(
Field('title'),
Field('title_de'),
Field('slug', readonly=''),
ButtonHolder(
Submit('submit', _('Save'))
)
)
return layout
def clean(self):
cleaned_data = super().clean()
return cleaned_data
class Meta:
model = Category
fields = ['title', 'slug']