如何在多语言项目中保存编辑表单



我正在学习《Django 2 by Examples》一书中的Django。我正在努力改进一个从第10章开始的项目。现在,我正试图在";django parler";。总的来说,我做到了,但在我看来,还有更好的方法。视图被实现为从mixin继承的类。如果在页面上选择了默认语言以外的语言,则表单中的laguage_code字段的值仍等于默认值。我尝试在form_valid方法中更改此字段,但没有成功。表单仍然使用默认语言保存。唯一对我有效的选择是这个,因为它看起来像是拼凑:

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'))

也许有人知道一种更优雅的方法来实现这一点?

我希望您有一个基于类的DjangoFormViewModelFormMixin:

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

对了。

CCD_ 3或CCD_。您可以使用django-modelTranslation。或者我的项目Django TOF v.2。

当然django 2已经是一个非常古老的项目了。Django 4.1要好得多。

在我看来,关于Django最好的书——Django设计模式和最佳实践。最新版本。它比"Django"更具Django风格;2范围";或";Django 2 by Example";

最新更新