Django中的Year字段

Django中的Year字段,第1张

Django中的Year字段

我最初的想法是编写一个可返回选择的可调用对象,该选择将针对每个请求进行评估。

import datetimedef year_choices():    return [(r,r) for r in range(1984, datetime.date.today().year+1)]def current_year():    return datetime.date.today().yearclass MyModel(models.Model):    year = models.IntegerField(_('year'), choices=year_choices, default=current_year)

但是,这不起作用,因为Django的check框架不允许将year_choices用作默认值。即使您可以破解要动态生成的选择,它也会具有Django每年都会在选择更改时尝试创建迁移的缺点。

您可以通过在表单级别生成选择来避免这种情况。您可以在模型中使用验证器来防止无效数据。请注意,

MaxValuevalidator
函数包含在函数中,
max_value_current_year
以避免每年重新迁移。

import datetimefrom django.core.validators import MaxValuevalidator, MinValuevalidatordef current_year():    return datetime.date.today().yeardef max_value_current_year(value):    return MaxValuevalidator(current_year())(value)class MyModel(models.Model):    year = models.IntegerField(_('year'), validators=[MinValuevalidator(1984), max_value_current_year])def year_choices():    return [(r,r) for r in range(1984, datetime.date.today().year+1)]class MyForm(forms.ModelForm):    year = forms.TypedChoiceField(coerce=int, choices=year_choices, initial=current_year)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5617908.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存