django ModelMultipleChoiceField(默认值)

时间:2010-10-24 22:49:20

标签: python django forms

我一直在寻找并试图让这个工作过去几个小时,我不能

我有一个从数据库中获取的技能列表:

forms.ModelMultipleChoiceField(
                              skills.objects.all(), 
                              required=True, 
                              widget=forms.CheckboxSelectMultiple(),
                              label='Check your skills.',
                              initial=skill_list.objects.filter(user='void'),
                              )

但这不起作用,因为我希望它能起作用。我基本上想要显示技能列表(所有这些)以及用户已经检查过的技能列表... pff我甚至无法解释正确。

用户选中复选框并点击另一页面中的提交后,我想显示所有技能以及用户选中要检查的技能。

假设我有a b c并且用户检查b并点击提交,当我在w / e页面中我要显示a uncheked b已选中c未选中。

PS:如果我使用skills.objects.all(),我会进入HTML value 1,我该怎样才能这样做:

skills = (
         ('a', 'a'),
         ('b', 'b'),
         )  

而不是('1', 'a'), ('2', 'b')

1 个答案:

答案 0 :(得分:2)

您的问题有点不清楚,但我仍然会尽力而为。

首先,

  

我想展示所有技能和一个   用户选中要检查...

表单无权访问用户,因此您需要将其传递给用户。您可以通过重载__init__方法来完成此操作:

    def __init__(self, **kwargs):
        current_user = kwargs.pop ('user')
        super(FormName, self).__init__(attrs)

然后设置最初选择的值

self.fields['skills'].initial = skill_list.objects.filter(user='void')

请记住,必须在调用基类的构造函数后执行此操作。

最后,

  

PS:如果我使用skills.objects.all()我   得到html值1和怎么样   我把它作为

     

技能=(            ('a','a'),            ('b','b'),            )

     

而不是('1','a'),('2','b')

你为什么要那样做?数字是您'技能'表中行的主键。 Django使用它来建立适当的关系。