Python 如何验证模型中的多个字段中至少有一个不是空的
我有一个模型:Python 如何验证模型中的多个字段中至少有一个不是空的,python,django,forms,Python,Django,Forms,我有一个模型: class Artwork(models.Model): title = models.CharField(max_length=50) description = models.TextField(null=True, blank=True) image_file = models.ImageField(upload_to='portfolios/image/%Y/%m', null=True, blank=True) video_file =
class Artwork(models.Model):
title = models.CharField(max_length=50)
description = models.TextField(null=True, blank=True)
image_file = models.ImageField(upload_to='portfolios/image/%Y/%m', null=True, blank=True)
video_file = models.FileField(upload_to='portfolios/video/%Y/%m', null=True, blank=True)
video_url = models.URLField(blank=True, null=True)
当用户编辑其中一个对象时,我如何验证这三个字段中的至少一个是否提供了数据:
image\u file
、video\u file
、或video\u url
,以便验证消息以字段的形式出现,与设置blank=False并将其保留为空时自动发生的情况类似?您需要覆盖表单的clean
方法,并将错误消息分配给字段。下面是一个示例,如果这三个字段都为空,则所有字段都会收到一条错误消息,该消息改编自:
See是一个更好的地方,因为它将由所有ModelForms检查ModelModelModel.clean():“用于在clean()之后执行任何额外的模型范围验证的钩子”已由self.clean_fields对每个字段调用。此方法引发的任何ValidationError都不会与特定字段关联;它将与非_field_错误定义的字段有特殊情况关联。”
from django import forms
class ArtworkForm(forms.Form):
def clean(self):
cleaned_data = super(ArtWorkForm, self).clean()
image_file = cleaned_data.get("image_file")
video_file = cleaned_data.get("video_file")
video_url = cleaned_data.get("video_url")
if not (image_file or video_file or video_url):
msg = "your error message."
self.add_error('image_file', msg)
self.add_error('video_file', msg)
self.add_error('video_url', msg)