2016-08-04 81 views
0

我聲明瞭一個遞歸模型,如下所示。如何修改或添加另一個unique_together Meta,以便recursiveA字段不能包含已存在的名稱和標記組合?Django meta unique_together遞歸模型

如果實例名稱= 'A' 和標記= 'B' 然後recursiveA.name = 'A' 和recursiveA.marker = 'B'

class A(models.Model): 
    name = models.CharField(max_length=32) 
    marker = models.CharField(max_length=32) 
    recursiveA = models.ManyToManyField('self', blank=True) 

    class Meta: 
     unique_together = ('name', 'marker') 

回答

0

您可以覆蓋save方法:!

class A(models.Model): 
    name = models.CharField(max_length=32) 
    marker = models.CharField(max_length=32) 
    recursiveA = models.ManyToManyField('self', blank=True) 

    class Meta: 
     unique_together = ('name', 'marker') 

    def save(self, *args, **kwargs): 
     is_new = self.pk is not None 
     if is_new: 
      assert self.name != self.recursiveA.name and self.marker ! = self.recursiveA.marker 
     return super().saver(*args, **kwargs)