您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Django中的Year字段

Django中的Year字段

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

import datetime

def year_choices():
    return [(r,r) for r in range(1984, datetime.date.today().year+1)]

def current_year():
    return datetime.date.today().year

class MyModel(models.Model):
    year = models.IntegerField(_('year'), choices=year_choices, default=current_year)

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

您可以通过在表单级别生成选择来避免这种情况。您可以在模型中使用验证器来防止无效数据。请注意,MaxValueValidator函数包含在函数中,max_value_current_year以避免每年重新迁移。

import datetime
from django.core.validators import MaxValueValidator, MinValueValidator

def current_year():
    return datetime.date.today().year

def 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)
Go 2022/1/1 18:50:47 有328人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶