说我有以下型号:
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_back
和status
两个字段相互依赖。例如,如果这本书是“借来的”,那么有一个due_back日期是没有意义的。
目标是,如果这本书是“借来的”,那本书可能只有一个到期日。但是如何做到这一点,是否存在针对此类问题的“最佳实践”?
答案 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 !!!')