Django Modelform - это не валидация, почему? - PullRequest
0 голосов
/ 21 мая 2018

У меня есть Django modelForm, которую я пытаюсь проверить.Поле является «настраиваемым» полем - т.е. это не поле в модели, а комбинация двух полей, которые я хочу проанализировать и проверить, существует ли во время очистки.Однако метод формы is_valid () не работает, он говорит, что valid = unknown, когда я печатаю форму.

Я использую хрустящие формы Django

Forms.py

class SingleSampleForm(forms.ModelForm):

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

    class Meta:
        model = Sample
        fields = ('sample_id',)


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

        self.helper = FormHelper()
        self.helper.layout = Layout(

            Field('sample_id',
                # autocomplete='off',
                css_class="search-form-label",
                ),

            Submit('submit', 'Search sample', css_class='upload-btn')
        )
        self.helper.form_method = 'POST'



    def clean_sample_id(self):

        self.sample_id = self.cleaned_data['sample_id']
        print('CLEAN SAMPLE')

        try:
            ... parse self.sample_id and check if exists ...

        except Exception as e:
            return('Sample does not exist')

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):

        sample_form = self.sample_form(request.POST)

        if sample_form.is_valid():
            print('VALID')
            ... HttpRedirect()...

        else:
            print('NOT VALID')
            ... raise error ...

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

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

каждый раз, когда я отправляю форму charfield и пытаюсь ее проверить, она печатает «NOT VALID», и если я распечатываю форму, она говорит valid = unknown.Это (почти) точно такая же форма, как и у другой формы, которая позволяет мне очистить поля и проверить их, даже если они не являются полями модели.Почему форма не проверяется?

Спасибо

1 Ответ

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

Ваша функция clean_sample_id ничего не возвращает, но должна либо вернуть очищенное значение, либо вызвать исключение.Вы можете использовать приведенный ниже код для проверки правильности.

def clean_sample_id(self):

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

См. Полную документацию.https://docs.djangoproject.com/en/2.0/ref/forms/validation/

...