Python 允许Django中的单个模型字段为null,但防止它们全部为null
我有一个Django模型类,如下所示: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=
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来创建直通表中的项