Django多选择选定的数据

时间:2011-08-29 14:11:05

标签: django forms

我一直试图破解这个坚果一段时间,但我似乎无法为多重选择设置选定的值。我所拥有的是:

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,})

用户和你都是查询集(

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'))

在一个测试案例中甚至是相同的。 没有选择的选项出现。

我尝试自己手动设置初始值以基于对象ID列表,传递单个id,传递(id,用户名)元组等等...尝试使用不同的小部件,但所有小部件显示所有选项但没有他们被选中了。

我做错了什么?

艾伦

1 个答案:

答案 0 :(得分:1)

尝试设置users字段的choices属性。初始字典中“用户”的值应该是用户选择的键的列表。例如,如果

self.fields['users'].choices = (
                               ('username1','Firstname Lastname'),
                               ('username2','Firstname Lastname'),
                               ('username3','Firstname Lastname'),
                               )

首字母应为['username1', 'username3']

然后将表单实例化和__init__更改为以下内容:

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