I’ve been trying to crack this nut for a while but I cannot seem to be able to set selected values for multipleselect. What I have is:
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
and i initiate it like that:
uform = GroupUsersForm(initial = {'all': users, 'users':u, 'group':g,})
both users and u are querysets (
users = get_users_with_perms(a).order_by('username', 'last_name', 'first_name')
u = User.objects.filter(Q(groups = g)).order_by('username', 'last_name', 'first_name'))
which in one test case were even the same.
No selected options showed up.
I tried setting the initial values myself manually to list based of object ids, passing single id, passing (id, username) tuple and so on… tried using different widget, but all widgets display all the options but none of them are selected.
what am i doing wrong?
Alan
Try setting the choices property of the users field. The value of ‘users’ in the initial dict should be a list of whatever the keys are for the user choices. For example, if
Initial should be
['username1', 'username3']Then change your form instantiation and
__init__to the following: