2017-08-22 59 views
2

说我有以下型号:Django模型:相关领域

class Book(models.Model): 
    due_back = models.DateField(null=True, blank=True) 

    AVAILABILITY = (
     ('a', 'Available'), 
     ('o', 'On loan'), 
     ('n', 'Not available'), 
     ('r', 'Reserved'), 
    ) 

    status = models.CharField(choices=AVAILABILITY, blank=True) 

我在这里的问题是,这两个领域due_backstatus互相依赖。例如,如果这本书是“借阅”的,那么有一个到期日期是没有意义的。

目标是,如果该书是“贷款”,该书可能只有一个到期日。但是,如何做到这一点,是否存在这种问题的“最佳实践”?

回答

-1

添加到Aliquis的答案重要的事情。为了调用Model.clean()方法,我们需要覆盖save()方法。

class ModelName(models.Model): 
    ... 
    def save(self, *args, **kwargs): 
     self.clean() 
     return super(ModelName, self).save(*args, **kwargs) 
0

你可以使用Django验证器来实现这一点。

from django.core.exceptions import ValidationError 

class Book(models.Model): 

    ... 
    def clean(self): 
     if self.status == 'o' and self.due_back is not None: 
      raise ValidationError('Error Book on Loan have due back date How !!!')