2011-01-07 83 views
0

我有一个表描述:unique_together表与ForeignKey的指向自身

name = models.CharField(max_length=70) 
parent = models.ForeignKey('self', null=True, blank=True) 

让我们假设我们有两个家长:

表(ID = 1,名称= “第一”) 表(ID = 2,名字= “第二”)

当我创建小孩:

表(名称= “第一”,父= 1) 表(名称= “第一”,父= 2)

保存对象应该通过,但是当我再次输入并保存

表(NAME = “FIRST_CHILD”,家长= 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') 

这部分检查。所以它的工作原理是独特的,但只适用于没有父母的记录

2

使用unique=TrueOnetoOneKey而不是ForeignKey。请参阅documentation