Почему эта форма Джанго не действительна? - PullRequest
0 голосов
/ 22 мая 2018

Почему эта форма не проверяется?Он даже не вызывает метод clean().

forms.py:

class SingleSampleForm(forms.Form):

    sample_id = forms.CharField(label='Sample ID:')

    class Meta:
        fields = ('sample_id',)

    def __init__(self, *args, **kwargs):
        super(SingleSampleForm, self).__init__()

        self.helper = FormHelper()
        self.helper.layout = Layout(
            Field('sample_id',
            css_class="search-form-label",),
            Submit('submit', 'Search sample', css_class='upload-btn')
        )

        self.helper.form_method = 'POST'


    def clean(self):
        print('CLEAN')
        sample_id = self.cleaned_data['sample_id']
        if sample_id:
            return sample_id
        raise ValidationError('This field is required')

views.py:

class SampleView(View):

    sample_form = SingleSampleForm

    def get(self, request, *args, **kwargs):

        sample_form = self.sample_form()

        self.context = {'sample_form': sample_form,}

        return render(request,
                    'results/single_sample_search.html',
                    self.context)


    def post(self, request, *args, **kwargs):

        self.sample_form = self.sample_form(request.POST)

        if self.sample_form.is_valid():
            print('Valid')
        else:
            print('not valid')

        self.context = {
                'sample_form': self.sample_form,
            }


        return render(request,
                'results/single_sample_search.html',
                self.context)

Я не понимаю, почему этодаже не вызывает clean() метод.У меня есть другая форма, которая почти идентична, которая подтверждает.Когда я делаю print dir(self.sample_form) после того, как я прошел диктовку request.POST, это говорит о том, что validation=unknown.Почему это?Как я могу проверить причину, по которой она не проверяется?

1 Ответ

0 голосов
/ 22 мая 2018

Вам необходимо передать *args и **kwargs, когда вы звоните super():

def __init__(self, *args, **kwargs):
    super(SingleSampleForm, self).__init__(*args, **kwargs)

На данный момент, вызов __init__ без каких-либо *args или **kwargs эквивалентензвонить с data=None.Форма не связана, поэтому никогда не будет действительной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...