我有一个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'
很明显,数据库中的字段_ips
,_cidrs
和ip_groups
可以为空。但是,当模型为时,我想阻止它们中的所有3个一起为空保存。换句话说,当保存模型时,这3个字段中的至少一个不应为空。
答案 0 :(得分:2)
首先,{{1}}与多对多字段没有任何意义,因为它实际上不是数据库中的列,而是完全独立的表中的条目。 / p>
在任何情况下,如果您要求至少其中一个字段为非空,则需要在验证时执行此操作;它不是你可以在模型定义中指定的东西。
但请注意,出于与上述相同的原因,在最初创建模型之前,您无法执行此操作;多对多字段在创建之前不能有值,因为它们需要ID才能在直通表中创建项目。