如果我在Django的模型中有一个DateField()字段,我该如何阻止为比今天更早的日期添加条目?
我可以在views.py级别上执行此操作,但它仍然可以从Django管理站点中利用。
更糟糕的是,我有一个设计决定在同一个模型中有单独的DateField()和TimeField()字段。我可以阻止加入旧版(日期+时间)而不是当前时间吗?预订过去的航班是没有意义的,即使它只有一个小时的时间。但问题是,我必须有单独的DateField()和TimeField();不是一个DateTimeField()。
答案 0 :(得分:0)
也许尝试使用Model.clean()
方法。这会在正确的位置引发ValidationError
(在admin中显示表单错误而不是500)。
clean方法只允许过期日期保存在过去,只有当它是现有记录并且到期时间没有改变时。
from datetime import datetime
from django.core.exceptions import ValidationError
class MyModel(models.Model)
expires = models.DateTimeField()
def __init__(self, *args, **kwargs):
super(Game, self).__init__(*args, **kwargs)
self.__old_expires = self.expires
def clean(self):
" Make sure expiry time cannot be in the past "
if (not self.id or self.__old_expires != self.expires)
and self.expires <= datetime.now():
raise ValidationError('MyModel entries cannot expire in the past.')
文档:https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.clean