Initial=True не работи в динамична форма на django

Искам предварително поставена отметка в квадратчето, предадох „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)

Въпреки това работи добре за статични форми. вижте кода по-долу

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

Има ли някакъв трик за предаване на начална стойност за динамично зареден елемент на формуляр?


person sumit    schedule 30.04.2012    source източник


Отговори (2)


Опитайте тази:

Вместо

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
person rantanplan    schedule 30.04.2012
comment
Благодаря ви, rantanplan, но направих няколко промени в логиката ви - person sumit; 02.05.2012

Опитах по-долу и се получи:

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