处理唯一 NULL 值的正确方法



我正在使用以下模型:

class FoodPlanningOnDemand(models.Model):
    catspad = models.ForeignKey('Catspad', null=False, blank=False)
    cat = models.ForeignKey('Cat', null=True, blank=True),
    amount = models.PositiveIntegerField(null=False, blank=False, default=5)
    food_limit = models.PositiveIntegerField(null=False, blank=False, default=0)
    name = models.CharField(max_length=128, null=True, blank=True)
    status = models.BooleanField(default=True, null=False)
    class Meta:
        unique_together = (('catspad', 'cat'))

cat领域是某种特殊的,因为如果null,这意味着计划涉及所有猫。由于我不希望计划是重复的,因此我不希望null值也是唯一的。但是 Django/Postgres 不会null视为一个值,因此不会触发重复错误。

我怎样才能设法改变这一点?我应该创建另一个字段吗?我的想法快用完了,谢谢你的帮助。

正如其他人在评论中指出的那样,NULL不是一个值

当索引声明为唯一时,多个表行相等 不允许使用索引值。空值不被视为相等。 多列唯一索引将仅拒绝所有索引的情况 列在多行中相等。

参考: https://www.postgresql.org/docs/9.5/static/indexes-unique.html

如果这不是你想要的,你需要创建一个可以识别为所有猫的唯一猫,例如:

all_cats = Cat.objects.create(name='__allcats__', ....)

然后,您可以记下它的主键或将名称字段与__allcats__进行比较,以确定FoodPlanningOnDemand是适用于所有猫还是只猫。

你可以对CatsPad做同样的事情

相关内容

最新更新