我正在使用以下模型:
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做同样的事情