我使用的是以下型号:
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
视为值,因此不会触发重复错误。
我如何设法改变这个?我应该创建另一个领域吗? 感谢您的帮助,我的想法已经用完了。
答案 0 :(得分:1)
正如其他人在评论中指出的那样,NULL
不是一个值
当索引声明为唯一时,多个表行等于 不允许使用索引值。空值不被认为是平等的。 多列唯一索引仅拒绝所有索引的情况 列在多行中相等。
参考:https://www.postgresql.org/docs/9.5/static/indexes-unique.html
如果这不是您想要的,您需要创建一个可以识别为所有猫的独特猫,例如:
all_cats = Cat.objects.create(name='__allcats__', ....)
然后,您可以记下它的主键,或者将名称字段与__allcats__
进行比较,以确定FoodPlanningOnDemand
是否适用于所有猫或一只猫。
你可以为CatsPad做同样的事情