Django multipleselect选定数据
我试着解决这个问题已经有一段时间了,但我似乎无法为multipleselect设置选定的值。我得到的是:Django multipleselect选定数据,django,forms,Django,Forms,我试着解决这个问题已经有一段时间了,但我似乎无法为multipleselect设置选定的值。我得到的是: class GroupUsersForm(forms.Form): users = forms.MultipleChoiceField() def __init__(self, *args, **kwargs): super(GroupUsersForm, self).__init__(*args, **kwargs) if kwargs.h
class GroupUsersForm(forms.Form):
users = forms.MultipleChoiceField()
def __init__(self, *args, **kwargs):
super(GroupUsersForm, self).__init__(*args, **kwargs)
if kwargs.has_key('initial'):
self.selected = kwargs['initial']['users']
self.choices = kwargs['initial']['all']
self.fields[self.get_field_name()] = self.get_users_field()
def get_users_field(self):
field_class = forms.MultipleChoiceField
field = field_class(
label=_(u"users"),
choices = self.get_field_choices(),
widget = FilteredSelectMultiple(_(u"users"), is_stacked= False),
#initial = self.get_field_initial(),
required= False
)
return field
def get_field_name(self):
return 'users'
def get_field_choices(self):
choices = [(p.id, p.username) for p in self.choices]
return choices
def get_field_initial(self):
selected = [(p.id, p.username) for p in self.selected]
return selected
我是这样开始的:
uform = GroupUsersForm(initial = {'all': users, 'users':u, 'group':g,})
用户和u都是查询集(
在一个测试案例中,它们甚至是相同的。
没有显示选定的选项
我尝试自己手动设置初始值,以基于对象id的列表、传递单个id、传递(id、用户名)元组等等…尝试使用不同的小部件,但所有小部件都显示所有选项,但没有一个被选中
我做错了什么
Alan尝试设置users字段的choices属性。初始dict中“users”的值应该是用户选择的任何键的列表。例如,如果
self.fields['users'].choices = (
('username1','Firstname Lastname'),
('username2','Firstname Lastname'),
('username3','Firstname Lastname'),
)
首字母应该是['username1','username3']
然后将表单实例化和\uuuuu init\uuuu
更改为以下内容:
uform = GroupUsersForm(users, initial = {'users':u,})
def __init__(self, user_choices, *args, **kwargs):
super(GroupUsersForm, self).__init__(*args, **kwargs)
self.fields['users'].choices = user_choices
好的。基本上,正如我发现的,我做错了的事情是我没有以正确的格式指定初始数据。我想你需要传递与初始数据相同类型的信息作为选择。
uform = GroupUsersForm(users, initial = {'users':u,})
def __init__(self, user_choices, *args, **kwargs):
super(GroupUsersForm, self).__init__(*args, **kwargs)
self.fields['users'].choices = user_choices