【发布时间】:2020-11-16 05:41:59
【问题描述】:
class Category(models.Model):
name = models.CharField(max_length=200)
parent = models.ForeignKey("self",
blank=True,
null=True,
related_name='children',
on_delete=models.CASCADE)
class Meta:
unique_together = [
('parent', 'name'),
]
在这个模型中,我可以创建多个对象
Category.objects.create(name="cat1", parent=None) #
Category.objects.create(name="cat1", parent=None)
# unique_together constraint should not
# allow this second object's reaction, but it is;
# behavior is the same even when the parent is not None.
我使用的Django版本是3.0.8
Postgres 12.3
psycopg2-二进制 2.8.5
更新:
Category.objects.create(name="cat1", parent=obj) #
Category.objects.create(name="cat1", parent=obj)
第二个对象或记录正在被创建,即使 parent 不是 None。
In [2]: Category2.objects.create(name="cat1")
Out[2]: <Category2: cat1>
In [3]: Category2.objects.create(name="cat1")
Out[3]: <Category2: cat1>
In [4]: par1 = Category2.objects.create(name="cat1")
In [6]: par1 = Category2.objects.create(name="cat2", parent=par1)
In [7]: par2 = Category2.objects.create(name="cat2", parent=par1)
这个问题不是重复的,它与问题中解释的可空外键无关。
【问题讨论】:
-
在我的情况下,即使使用非空字段值,我也能够创建记录
-
您能否举例说明使用非空值时发生的错误?
-
你跑
makemigrations和migrate了吗? -
javed:数据库不认为两个
NULLs 是相同的。所以NULL不会“违反”唯一性约束。 -
@IainShelvington:抱歉,自动补全:S
标签: django django-models