我有一张描述的表:
name = models.CharField(max_length=70)
parent = models.ForeignKey('self', null=True, blank=True)
让我们假设我们有两个父母:
表(id = 1,name =“first”) 表(id = 2,name =“second”)
当我创造孩子时:
表(name =“first”,parent = 1) 表(name =“first”,parent = 2)
保存对象应该通过,但是当我再次输入并保存
时表(name =“first_child”,parent = 1)
它应该失败。我该怎么做?名称中的唯一不是解决方案,因为父级和子级可以具有相同的名称。
答案 0 :(得分:2)
使用unique=True
或OnetoOneKey
代替ForeignKey
。请参阅documentation。
答案 1 :(得分:0)
正如我在评论中写的那样
unique_together = ('name', 'parent')
是好方法,这只是解决方案的一部分。我也用这样的代码制作了干净的功能:
if self.parent is None:
try:
result = Table.objects.filter(name=self.name, parent=None)
if result.count():
raise
except Exception as ex:
raise ValidationError('Record with this name already exists')
此部分检查是否没有父母的记录。所以它的工作方式与众不同,但仅适用于没有父母的记录。