允许Django中的各个模型字段为null,但阻止所有这些字段为空

时间:2018-05-22 07:57:00

标签: 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='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_cidrsip_groups可以为空。但是,当模型为时,我想阻止它们中的所有3个一起为空保存。换句话说,当保存模型时,这3个字段中的至少一个不应为空。

1 个答案:

答案 0 :(得分:2)

首先,{{1}}与多对多字段没有任何意义,因为它实际上不是数据库中的列,而是完全独立的表中的条目。 / p>

在任何情况下,如果您要求至少其中一个字段为非空,则需要在验证时执行此操作;它不是你可以在模型定义中指定的东西。

但请注意,出于与上述相同的原因,在最初创建模型之前,您无法执行此操作;多对多字段在创建之前不能有值,因为它们需要ID才能在直通表中创建项目。