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'),
]
In this model I am able to create multiple objects with
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 version I am using is 3.0.8
Postgres 12.3
psycopg2-binary 2.8.5
Update:
Category.objects.create(name="cat1", parent=obj) #
Category.objects.create(name="cat1", parent=obj)
second object or record is getting created even when parent is not 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)
This question not a duplicate, it is not related to nullable foreign keys as explained in the question.