django отключено Логическое поле не отправлено методом POST - PullRequest
0 голосов
/ 07 июня 2019

У меня есть BooleanField, который при определенных условиях должен быть отключен.

Как я могу отправить ввод, даже если он отключен

отправка формы в первый раз
вторая форма отправки , игнорирующая отключенное логическое поле

views.py

def test(request):
    form = InformationForm()
    test_table = TestTable.objects.get(id=1)
    result = ''

    if test_table.status == True:
        result = True
        form.fields['agree'].initial = True    
        form.fields['agree'].widget.attrs['disabled'] = True
        # form.fields['agree'].widget.attrs={'onclick': 'return false','style':'opacity: 0.4 !important'}

    if request.method == "POST":
        post_form = InformationForm(request.POST)
        result = post_form['agree'].value()
        text = post_form['text'].value()

        if post_form['agree'].value() == True:
            t = TestTable.objects.filter(id=1).first()
            t.status = 1
            t.save()

            post_form.fields['agree'].initial = True  
            post_form.fields['agree'].widget.attrs['disabled'] = True
           #post_form.fields['agree'].widget.attrs={'onclick': 'return false','style':'opacity: 0.4 !important'}
            return render(request,'test.html',context={'form':post_form,'result':result,'text':text})

    text = form['text'].value()
    return render(request,'test.html',context={'form':form,'result':result})

каждый раз, когда отключено, BooleanField возвращает значение false, даже если оно выбрано
Меня также ссылают на эту ссылку

forms.py

class InformationForm(forms.Form):
    text = forms.CharField(max_length=50)
    agree = forms.BooleanField(required=False)

    def clean(self):
        agree = self.cleaned_data.get('agree')
        text = self.cleaned_data.get('text')

    #def clean_agree(self):
    #    if self.instance and self.instance.pk:
    #        return self.instance.agree
    #    else:
    #        return self.cleaned_data.get('agree')

1 Ответ

1 голос
/ 07 июня 2019

Это намеренное дизайнерское решение Django, так что пользователи не могут редактировать ввод HTML и удалять атрибут disabled, который может позволить пользователям обновлять значения, которые они не предназначены для обновления. Из документов :

Логический аргумент disabled, установленный на True, отключает поле формы с помощью атрибута HTML disabled, чтобы пользователи не могли его редактировать. Даже если пользователь изменяет значение поля, отправленное на сервер, оно будет игнорироваться в пользу значения из исходных данных формы.

Я рекомендую обновить метод __init__() класса формы, чтобы он добавлял атрибут disabled только тогда, когда поле должно быть отключено.

...