Как сохранить редактирование формы в мультиязычном проекте
Я изучаю 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"