我有以下的模型和形式:编辑Django模型的查询集
# Model
class Fruit(...):
name = models.CharField(...) # Default name of the fruit
engName = models.CharField(...) # English name
def __str__(self):
return self.name
# Form
class ComboProductForm(forms.ModelForm):
fruit = forms.ModelChoiceField(queryset=Fruit.objects.none())
def __init__(self, *args, **kwargs):
branch = kwargs.pop('branch')
fruits = Fruit.objects.filter(branch=branch) # Branch of the company
self.fields['fruit'].queryset = fruits
在公司的每个分支都有不同的水果,所以我在__init__
方法来筛选水果。我想是根据request.LANGUAGE_CODE
修改查询集:
def __init__(self, *args, **kwargs):
branch = kwargs.pop('branch')
language = kwargs.pop('language')
fruits = Fruit.objects.filter(branch=branch) # Branch of the company
if language == 'en':
for fruit in fruits:
fruit.name = fruit.engName
self.fields['fruit'].queryset = fruits
也就是说,显示英文名字的水果,如果在语言代码是英语。但是,由此产生的fruits
的内容似乎没有改变。我该如何修改查询集?
我也曾尝试以下操作:
fruits = list(fruits)
for fruit in fruits:
fruit.name = fruit.engName
但后来我不得不fruits
转换回查询集类型。我该怎么做,并将这项工作?
我也想在模型方法__str__
返回不同的领域:
def __str__(self):
if language_code == 'English': # Hypothetical statement
return self.name
return self.engName
但不知道该怎么做。请帮助和谢谢。
这个方法更简单,更好 –