我正在尝试将django中的多个字段的默认多选项更改为复选框。我设法显示复选框和一切,但在浏览器中我只得到每个字段值的第二个字符,而当我在django shell中键入相同的命令时,我得到完整的列表。
示例:
当我输入:
from myapp.models import Interest
obj_list = Interest.objects.all()
x = [obj.interest_mame for obj in obj_list]
x
我得到了预期的结果(对于前几个值)
[u'Architektur', u'Handwerken', u'Ausgehen', u'manymorestringshere']
但是,当我在浏览器中打开我的注册表单时,我只得到每个字符串的第二个字母。
在这种情况下,复选框旁边会是 r , a , u , a 。
我的文件如下:
from django.forms import ModelForm
from myapp.models import Person, Interest
from django import forms
from django.forms.extras.widgets import SelectDateWidget
class PersonForm(ModelForm):
year_range = range(1996, 1920, -1)
person_birthdate = forms.DateField(widget=SelectDateWidget(years=year_range))
obj_list = Interest.objects.all()
person_interests = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=[obj.interest_name for obj in obj_list])
class Meta:
model = Person
我想可能在每个字符串前面都是 u ,但我读到这只会显示它是another question中的unicode字符串。
如果你们其中一个人能向我解释为什么我会得到这个奇怪的显示错误,我会很高兴。
答案 0 :(得分:1)
选择必须是元组(value, display_value)
的列表,如shown in the official documentation。如果您希望显示值与提交的值相同,则可以执行choices=[(obj.interest_name, obj.interest_name) for obj in obj_list]
。