Django模型:依赖字段

时间:2017-08-22 18:37:01

标签: python django model

说我有以下型号:

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两个字段相互依赖。例如,如果这本书是“借来的”,那么有一个due_back日期是没有意义的。

目标是,如果这本书是“借来的”,那本书可能只有一个到期日。但是如何做到这一点,是否存在针对此类问题的“最佳实践”?

2 个答案:

答案 0 :(得分:2)

我想回答我自己的问题。我进一步查看了Django文档,看起来Model.clean()方法是一个解决方案。

https://docs.djangoproject.com/en/1.11/ref/models/instances/#django.db.models.Model.clean

如果有人知道更好的解决方案,请发帖。 :)

答案 1 :(得分:0)

你可以使用Django Validators实现这一点。

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 !!!')