2011-01-07 40 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