【问题标题】:Initial=True not working in django dynamic formInitial=True 不能以 django 动态形式工作
【发布时间】:2012-05-09 22:46:26
【问题描述】:

我想要预先选中的复选框,我通过了“initial=True”但它不起作用。下面是代码。

class permForm(forms.Form):

    id = forms.CharField(widget=forms.TextInput(attrs={'id':'user_id'}),required=False)

    def __init__(self, data, **kwargs):
        super(permForm, self).__init__(data, **kwargs)
        # offset_arr=data.split('/')
        # menu_id=offset_arr[1]
        # user_id=offset_arr[2]
        # flag=   offset_arr[3]
        # if user.has_perm(permission.codename, task):
        usr  = User.objects.get(id=1)
        task = Site.objects.get_current()

        for item in list(AdminMenu.objects.filter(parent_id=0)):
            permission=Permission.objects.get(id=item.permission_id);
            if usr.has_perm(permission.codename, task):
                checked=False
            else:
                checked=True
            self.fields['menu_%d' % item.id] = forms.BooleanField(initial=True,label=item.title,required=False)
            for childitem in list(AdminMenu.objects.filter(parent_id=item.id)):
                cpermission=Permission.objects.get(id=childitem.permission_id);
                if usr.has_perm(cpermission.codename, task):
                    childchecked=True
                else:
                    childchecked=False

                self.fields['menu_%s' %childitem.id] = forms.BooleanField(initial=True,label=childitem.title+'%s'%(data),required=False)

不过它适用于静态表单。看下面的代码

类 MyForm(forms.Form):
option = forms.BooleanField(required=False, initial=True)

有什么技巧可以为动态加载的表单元素传递初始值吗?

【问题讨论】:

    标签: django forms checkbox customization


    【解决方案1】:

    试试这个:

    代替

    self.fields['menu_%d' % item.id] = forms.BooleanField(initial=True,label=item.title,required=False)
    

    在构造字段时移除 initial=True 参数并填充其初始值 下一步中的值,例如:

    self.fields['menu_%d' % item.id] = forms.BooleanField(label=item.title,required=False)
    self.fields['menu_%d' % item.id].initial = True
    

    【讨论】:

    • 谢谢rantanplan,但我对你的逻辑做了一些修改
    【解决方案2】:

    我在下面尝试过并且成功了:

    self.fields['menu_%d' % item.id] = forms.BooleanField(label=item.title, required=False)
    self.fields['menu_%d' % item.id].widget.attrs['checked'] = 'checked'
    

    【讨论】:

      猜你喜欢
      • 2017-07-01
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      相关资源
      最近更新 更多