【发布时间】:2021-04-05 21:11:03
【问题描述】:
需要通过输入图片的链接来向表单添加图片,或上传文件 从您的计算机。 如果在提交表单时未输入任何选项,或同时输入了两个选项,则应显示错误消息。加载成功后,应该会进入图片页面。
models.py:
class Picture(models.Model):
url = models.URLField(blank=True, verbose_name='Ссылка на изображение')
image = models.ImageField(upload_to='pictures/%Y/%m/%d', width_field='image_width', height_field='image_height',
blank=True, verbose_name='Изображение')
image_width = models.IntegerField(default=0, blank=True, verbose_name='Ширина изображения')
image_height = models.IntegerField(default=0, blank=True, verbose_name='Высота изображения')
is_active = models.BooleanField(default=True, verbose_name='Актуальность изображения')
created = models.DateField(blank=True, null=True, default=timezone.now, verbose_name='Дата создания записи')
updated = models.DateField(blank=True, null=True, default=timezone.now, verbose_name='Дата ред-ия записи')
views.py:
def add_picture(request):
picture = Picture.objects.filter(is_active=True)
if request.method == 'POST':
form = PictureCreateForm(data=request.POST, files=request.FILES)
if form.is_valid():
form.save()
return render(request, 'add_picture.html', locals())
else:
messages.error(request, 'Ошибка, проверьте данные')
else:
form = PictureCreateForm()
return render(request, 'add_picture.html', locals())
forms.py:这里需要定义一个方法clean
class PictureCreateForm(forms.ModelForm):
class Meta:
model = Picture
fields = ('url', 'image')
def clean(self):
cd = self.cleaned_data
if cd['url'] and cd['image']:
raise forms.ValidationError('Ошибка!')
if not cd['url'] and not cd['image']:
raise forms.ValidationError('Ошибка!')
return cd
urls.py:
urlpatterns = [
path('', views.home, name='home'),
path('add_picture/', views.add_picture, name='add_picture'),
path('picture_detail/<int:id>/', views.picture_detail, name='picture_detail'),
]
【问题讨论】:
标签: django django-views django-forms django-urls django-validation