Читаю документацию по 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>
Изображения загружаются нормально по обоим условиям. Но если оба поля оставить пустыми или заполнить. То ошибки не возникает. Подскажите в чем может быть причина?