2010-10-24 66 views
2

我一直在寻找,并试图得到这个在过去的几个小时的工作,我不能Django的ModelMultipleChoiceField(默认值)

我有,我从数据库中取技能列表:

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

但这不工作,因为我期望它的工作。我基本上想要显示技能列表(所有这些)以及用户选中要检查的技能列表......我甚至不能解释正确。

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

可以说我有abc和用户检查b并点击提交时,单位为W/E页我想显示a uncheked b检查c选中。

PS:如果我使用skills.objects.all(),我得到的HTML value 1和我怎么能做出这样的:

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

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

回答

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使用它来设置适当的关系。

+0

为什么要这样做?首先thx为你答复...在用户提交这个表单之后,我想让值为1而不是1,因为我不想查询数据库的内容1,并根据这些数据执行操作......不知道这是否正确,我可以使用主键但我很懒:D thx再次为您的答复:) – void 2010-10-27 22:10:15