postgresql 如何设置Django持续时间字段的最大值?

falq053o  于 2023-02-15  发布在  PostgreSQL
关注(0)|答案(2)|浏览(138)

我有一个Django模型有一个持续时间字段。我希望用户不能把一个超过00:09:59的值。不幸的是,我在文档中找不到任何信息:https://docs.djangoproject.com/en/4.1/ref/models/fields/#durationfield

h43kikqp

h43kikqp1#

您可以为此添加验证器。
它将类似于:

DurationField(
    validators=[MaxValueValidator(datetime.timedelta(minutes=10)]
    )
whhtz7ly

whhtz7ly2#

使用默认值DurationField时不可能。
可以按以下格式覆盖clean_%s方法:

from django import forms

class YourForm(forms.Form):
    duration_field = forms.DurationField()

    def clean_duration_field(self):
        data = self.cleaned_data['duration_field']
        if value > timedelta(minutes=9, seconds=59):
            raise forms.ValidationError("....", code="invalid")
        
        return data

如果您需要在许多地方执行此验证,则可以创建自定义字段以覆盖字段的验证方法:

from django import forms
from django.core.validators import validate_email

class RestrictedDurationField(forms.DurationField):

    def __init__(self, limit: timdelta, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.limit = limit

    def validate(self, value):
        super().validate(value)
        if value > self.limit:
            raise forms.ValidationError("....", code="invalid")

# and usage
class form(Form):
    duration_field = RestrictedDurationField(limit=timedelta(minutes=9, seconds=59), ...)

相关问题