我有以下Django模型:
class BarEvent(models.Model):
EVENT_TYPES = ( ('op', 'opening'), ('cl', 'closing'), ('ea', 'event_a'), ('eb','event_b') )
event_type = models.CharField(max_length=2, choices=BAR_BALANCE_TYPES)
date = models.DateField("Data", default=datetime.now)
其中BarEvent对象表示按日期和时间排序的事件。 我需要确保'开启'或'关闭'事件是交替的(即没有两个连续'开启'或'关闭'事件),所以如果我尝试在另一个'开放'事件之后插入'开放'事件插入被阻止,但我不知道如何实现这一目标。
我应该在重写的保存方法中对现有记录进行检查吗?
答案 0 :(得分:1)
您可以在模型中编写clean
方法,以在实际保存对象之前检查额外的验证。
class BarEvent(models.Model):
EVENT_TYPES = ( ('op', 'opening'), ('cl', 'closing'), ('ea', 'event_a'), ('eb','event_b') )
event_type = models.CharField(max_length=2, choices=BAR_BALANCE_TYPES)
date = models.DateField("Data", default=datetime.now)
def clean(self):
"""
Custom clean method to validate there can not be two
consecutive events of same type
"""
if self.objects.latest('date').event_type == self.event_type:
raise ValidationError('Consecutive events of same type %s' % self.event_type)