2017-08-22 287 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 !!!')