是否可以为下拉菜单中的每个项目设置标签?它显示模块实例的__str__
输出 - 表中的项。
class LanguageDropDownForm(forms.Form):
languages = forms.ModelChoiceField(queryset=Languages.objects.all().order_by('language_shortcut'))
Models.py:
class Languages(models.Model):
language = models.CharField(max_length=100)
language_shortcut = models.CharField(max_length=3)
price_per_word = models.FloatField()
def __str__(self):
return 'SC: {} Lang: {} PPW: {}'.format(self.language_shortcut,self.language,self.price_per_word)
你能给我一个建议吗?
我希望仅举例model.language
或model.name
代替__str__
方法,例如在admin
中有用。
答案 0 :(得分:0)
是的。只需使用 unicode ,而不是你在那里。
def __unicode__(self):
答案 1 :(得分:0)
正如doc所述,您应该继承语言字段的默认ModelChoiceField
并覆盖label_from_instance
方法:
class LanguageModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return 'SC: {} Lang: {} PPW: {}'.format(obj.language_shortcut,
obj.language,
obj.price_per_word)
然后在您的表单中执行:
class LanguageDropDownForm(forms.Form):
languages = LanguageModelChoiceField(queryset=Languages.objects.all().order_by('language_shortcut'))