Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何验证模型中的多个字段中至少有一个不是空的_Python_Django_Forms - Fatal编程技术网

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)