0

如果我在 Django 的模型中有 DateField() 字段,如何防止添加比今天更早的日期条目?

我可以在 views.py 级别上执行此操作,但它仍然可以从 Django 管理站点进行利用。

更糟糕的是,我有一个设计决定,即在同一模型中拥有单独的 DateField() 和 TimeField() 字段。我可以防止添加到比当前时间更早的(日期+时间)吗?预订过去的航班是没有意义的,即使它只有一个小时。不过,我的问题是我必须有单独的 DateField() 和 TimeField(); 不是一个 DateTimeField()。

4

1 回答 1

0

也许试试这个Model.clean()方法。这将ValidationError在正确的位置引发 s(将在管理员中显示表单错误而不是 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

于 2013-04-05T01:49:05.617 回答