我在我的Django项目中实现了翻译。翻译的最后一件事是翻译类别名称,这是由外键连接的不同模型。
我的模特:
class Category(models.Model):
name = models.CharField(max_length=200)
name_pl = models.CharField(max_length=200, default='none')
slug = models.SlugField()
def __str__(self):
return self.name
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Category, self).save(*args, **kwargs)
class Meta:
verbose_name_plural = "Categories"
class Note(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='note', null=True)
title = models.CharField(max_length=200)
note_text = models.TextField()
add_date = models.DateTimeField('added date', auto_now_add=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE, default=7)
edit_dates = ArrayField(
models.DateTimeField('edit dates', blank=True, null=True),
default=list,
)
members = ArrayField(
models.CharField(max_length=200)
)
allow_edits = models.BooleanField(default=True)
def __str__(self):
return self.title
在Category模型中是field name,它是类别的英文名称和field name_pl -类别的波兰语名称。
我的表格:
class AddNewNote(forms.ModelForm):
file_field = forms.FileField(widget=forms.ClearableFileInput(attrs={
'multiple': True, 'style': 'font-size: 22px;'}
), required=False)
class Meta:
model = Note
fields = ['title', 'note_text', 'category', ]
widgets = {
'category': forms.Select(attrs={'style': 'font-size: 22px;'}),
'title': forms.TextInput(attrs={'style': 'font-size: 22px;'}),
'note_text': forms.Textarea(attrs={'style': 'font-size: 22px;'}),
}
def __init__(self, *args, **kwargs):
super(AddNewNote, self).__init__(*args, **kwargs)
self.fields['file_field'].label = _("Files")
self.fields['title'].label = _("Title")
self.fields['note_text'].label = _("Note text")
self.fields['category'].label = _("Category")
我正在使用gettext_lazy翻译表单标签,但我不知道如何在语言的情况下使用不同的Category字段。我知道有一个函数get_language()
,所以我可以这样做:
from django.utils.translation import get_language
if get_language() == 'en':
fields = ['title', 'note_text', 'category.name',]
elif get_language() == 'pl':
fields = ['title', 'note_text', 'category.name_pl',]
但这显然行不通。如何做到这一点?
2条答案
按热度按时间06odsfpq1#
你可以从你的视图中将语言传递给你的表单,比如;
然后您可以在表单中获取该值并修改加载的字段;
然而,你不能做的是,你试图在
Note
的表单中对相关模型上的字段做什么。对于要修改的每个模型示例,都需要一个表单。因此,您需要为要修改的
Category
示例提供一个内联表单。这变得有点复杂,但文档是最好的开始。o2gm4chl2#
解决办法比我想象的要简单。我所要做的就是检查
models.py
中的语言并返回正确的字段。