Показать все языки в форме, используя django-переводы - PullRequest
0 голосов
/ 23 октября 2019

Я использую 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']

1 Ответ

0 голосов
/ 23 октября 2019

Согласно документации, вы должны иметь возможность использовать ModelForms

...