2016-09-25 69 views
1

我有一个名为LeaseTerm。我想模式不具有根据具体租赁是IS_ACTIVE而不是is_terminated如何在编辑时在django模型中调用clean方法?

class LeaseTerm(CommonInfo): 
     version = IntegerVersionField() 
     start_period = models.ForeignKey(Period, related_name='start_period') 
     end_period = models.ForeignKey(Period, related_name='end_period') 
     lease = models.ForeignKey(Lease) 
     increase = models.DecimalField(max_digits=7, decimal_places=2) 
     amount = models.DecimalField(max_digits=7, decimal_places=2) 
     is_terminated = models.BooleanField(default=False) 

     def clean(self): 
      model = self.__class__ 
      if self.lease_id and (self.is_terminated == False) and model.objects.filter(lease=self.lease, is_active=True).count() == 1: 
       raise ValidationError('!Lease has a active condition already, Terminate prior to creation of new one'.format(self.lease)) 

为此,我写了一个干净的方法,当我创建一个新的租赁完美的作品超过1个leaseTerm术语。但是,当我做Edit时,这个方法是一个问题,因为它自身计数并且不允许保存。

任何建议我该如何克服这个问题?编辑时我只想跳过干净的方法。

回答

1

为什么不从您的查询中排除当前的LeaseTerm实例?那样的话,.clean()方法仍然有用,如果你以后需要做些什么的话。

这只是将.exclude(id=self.id)添加到查询集的问题。

model.objects.filter(lease=self.lease, is_active=True).exclude(id=self.id).count()

相关问题