Как сохранить редактирование формы в мультиязычном проекте

Я изучаю Django по книге Django 2 на примерах. Я пытаюсь улучшить проект, который начинается в главе 10. Сейчас я пытаюсь добавить многоязычность с помощью "django-parler". В целом у меня получилось, но мне кажется, что есть способы получше. Представления реализованы как классы, которые наследуются от миксинов. Если на странице выбран язык, отличный от языка по умолчанию, то форма все равно приходит со значением поля laguage_code равным default. Я безуспешно пытался изменить это поле в методе form_valid. Форма по-прежнему сохранялась с языком по умолчанию. Единственный вариант, который работает для меня, это следующий, но он выглядит как kludge:

def form_valid(self, form):
    language = translation.get_language()
    _course = form.save(commit=False)

    try:
        course = Course.objects.get(pk=_course.id)
    except Course.DoesNotExist:
        course = Course()
        course.owner = self.request.user
    course.set_current_language(language)

    cd = form.cleaned_data
    course.subject = cd['subject']
    course.title = cd['title']
    course.slug = cd['slug']
    course.overview = cd['overview']
    course.save()
    return redirect(reverse('courses:manage_list'))

Возможно, кто-то знает более элегантный способ реализовать это? Я буду благодарен.

Надеюсь, у вас есть Django FormView на основе классов ModelFormMixin:

def form_valid(self, form):
    self.obj = form.save()  # you dont need it in UpdateView
    return super().form_valid(form)

Кстати.

Django-Parler или Django-HVAD - это уже умершие проекты. Вы можете использовать django-modelTranslation. Или мой проект Django-TOF v.2.

Конечно, django 2 - это уже очень старый проект. Django 4.1 намного лучше.

На мой взгляд, лучшая книга о Django - Django Design Patterns and Best Practices. Последняя версия. она более Django-шная, чем "2 scope" или "Django 2 by Example"

Вернуться на верх