LINUX.ORG.RU

Проверка полей формы «cleaned_data»

 ,


0

1

Читаю документацию по forms validation и пытаюсь выполнить имеющийся там пример. Но валидация не срабатывает. Подскажите в чем может быть причина?

# forms.py
class UploadPictureForm(forms.Form):
   
    name_image = forms.CharField(max_length=30, required=False)
    url = forms.URLField(required=False)
    img = forms.ImageField(required=False)

    def clean(self):
        cleaned_data = super(UploadPictureForm, self).clean()
        url = cleaned_data.get('url')
        img = cleaned_data.get('img')

        if (url and img) or (not url and not img):
            raise forms.ValidationError('плохо заполнили')
        
        return cleaned_data

# views.py

class UploadImage(FormView):
    form_class = UploadPictureForm
    template_name = 'resize_image/upload_image.html'
    success_url = reverse_lazy('image_list')
    
    def form_valid(self, form):
        if form.cleaned_data['img'] and not form.cleaned_data['url']:
            self.object = Picture.objects.create(
                upload_time = timezone.now(),
                img = form.cleaned_data['img'],
                name_image = form.cleaned_data['name_image'],)

        if form.cleaned_data['url'] and not form.cleaned_data['img']:
            pic_url = form.cleaned_data['url']
            name = urlparse(pic_url).path.split('/')[-1]
            response = requests.get(pic_url)
            picture = Picture()
            if response.status_code == 200:
                picture.img.save(name, ContentFile(response.content), save=False)
                picture.upload_time = timezone.now()
                picture.name_image = name
                picture.save()

<form action="" method="post" enctype="multipart/form-data">
     {% csrf_token %}
     
    <div class="form-group">
        <label>файл</label>
        {{ form.img }}
    </div>
    <div class="form-group">
        <label>Название</label>
        {{ form.name_image }}
    </div>
    <div class="form-group">
        <label>URL</label>
        {{ form.url }}
    </div>     

            
    <input type="submit" value="Submit" />
</form>

Изображения загружаются нормально по обоим условиям. Но если оба поля оставить пустыми или заполнить. То ошибки не возникает. Подскажите в чем может быть причина?

С таким написанием условий тебе надо запретить к компу подходить пока ты школьный курс алгоритмики не освоишь.

Goury ★★★★★ ()
Ответ на: комментарий от anonymous

Все можно. Бейте по рукам и показывайте,как правильно.

Иначе это выглядит,как едкое высказывание более опытного человека, которое ничему не научит.

Покажите, как правильно ,и следующий раз я не повторю таких ошибок.

PavelShturm ()
Ответ на: комментарий от PavelShturm

Смотри ютуб с мобилы.

Правильно — это прочитать и понять учебник прежде чем браться за клавиатуру.
Иначе так всю жизнь тебя придётся за ручку водить.

Goury ★★★★★ ()

Вытащи значения из cleaned_data в переменные, а то много букв. В подходящем месте воткни elif вместо if. Подумай, что будет, если скачать картинку по url не получится.

А так вполне читаемо.

goury вообще табами отступы делает и ничего, живой.

anonymous ()

Что тут нечитаемого я не пойму? Ну давайте эксперты перепишите этот код лучше?

abc ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.