Django模型约束失效:如何强制两字段至少一个非空/非空字符串?
解决Django Fruit模型CheckConstraint不生效的问题
原约束逻辑存在错误:当字段为null时,~Q(name1__exact='')会被判定为true(因为null不等于空字符串),导致整个check条件始终成立,无法阻止两个字段都为空的实例创建。
正确的约束逻辑应该是至少一个字段同时满足非null且非空字符串,修改后的模型代码如下:
class Fruit(models.Model): name1 = models.CharField(max_length=255, blank=True, null=True) name2 = models.CharField(max_length=255, blank=True, null=True) class Meta: constraints = [ models.CheckConstraint( check=( (Q(name1__isnull=False) & ~Q(name1__exact='')) | (Q(name2__isnull=False) & ~Q(name2__exact='')) ), name='color_names_not_null_or_empty' ) ]
修改完成后,需要生成并应用数据库迁移,使约束生效:
- 生成迁移文件:
python manage.py makemigrations - 应用迁移:
python manage.py migrate
内容的提问来源于stack exchange,提问作者Artem Dumanov
相关产品推荐
相关产品推荐

