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 允许Django中的单个模型字段为null,但防止它们全部为null_Python_Django_Django Models - Fatal编程技术网

Python 允许Django中的单个模型字段为null,但防止它们全部为null

Python 允许Django中的单个模型字段为null,但防止它们全部为null,python,django,django-models,Python,Django,Django Models,我有一个Django模型类,如下所示: class IPGroup(BaseModel): """ Stores IP Groups """ name = models.CharField(max_length=50, unique=True) team = models.ForeignKey(Team, on_delete=models.CASCADE) _ips = models.ManyToManyField(IP, through=

我有一个Django模型类,如下所示:

class IPGroup(BaseModel):
    """
        Stores IP Groups
    """
    name = models.CharField(max_length=50, unique=True)
    team = models.ForeignKey(Team, on_delete=models.CASCADE)
    _ips = models.ManyToManyField(IP, through='connectivity_service.IPGroupToIP', null=True)
    _cidrs = models.ManyToManyField(CIDR, through='connectivity_service.IPGroupToCIDR', null=True)
    _ip_groups = models.ManyToManyField('self', through='connectivity_service.IPGroupToIPGroup', null=True,
                                        symmetrical=False)

    def __unicode__(self):
        return f'{self.name}'

    class Meta:
        app_label = 'connectivity_service'

很明显,数据库中的
\u ips
\u cidrs
ip\u组
字段可以为空。但是,我希望在保存模型时,防止这三个字段同时为空。换句话说,保存模型时,这3个字段中至少有一个不应为空

首先,
null
对于多对多字段没有任何意义,因为它实际上不是数据库中的一列,而是完全独立表中的一个条目

在任何情况下,如果您想要求这些字段中至少有一个是非空的,那么您需要在验证时这样做;这不是您可以在模型定义中指定的内容


但是也要注意,出于与上面相同的原因,在最初创建模型之前不能这样做;多对多字段在创建之前不能有值,因为它们需要ID才能在直通表中创建项。

首先,
null
对多对多字段没有任何意义,因为它实际上不是数据库中的一列,而是完全独立表中的一个条目

在任何情况下,如果您想要求这些字段中至少有一个是非空的,那么您需要在验证时这样做;这不是您可以在模型定义中指定的内容

但是也要注意,出于与上面相同的原因,在最初创建模型之前不能这样做;多对多字段在创建之前不能有值,因为它们需要ID来创建直通表中的项