如何在Django ModelForm中设置默认时间
给Django ModelForm设置默认时间的几种方法
针对你的RoomForm,有以下几种设置默认时间的实用方式:
方法一:在表单字段定义时指定initial参数
直接在表单的TimeField里添加initial参数,设置固定的默认时间值:
class RoomForm(forms.ModelForm): class TimeInput(forms.TimeInput): input_type = 'time' available_from = forms.TimeField( widget=TimeInput(), initial='09:00:00' # 设置默认时间为9点 ) available_till = forms.TimeField( widget=TimeInput(), initial='18:00:00' # 设置默认时间为18点 ) class Meta: model = Room fields = ['available_from','available_till']
方法二:在表单__init__方法中动态设置初始值
如果需要根据场景动态生成默认值(比如基于当前时间),可以在表单的构造方法里修改:
from datetime import time, datetime class RoomForm(forms.ModelForm): class TimeInput(forms.TimeInput): input_type = 'time' available_from = forms.TimeField( widget=TimeInput(), ) available_till = forms.TimeField( widget=TimeInput(), ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 动态设置默认值:当前时间往后推1小时 now = datetime.now().time() default_from = time(now.hour + 1, now.minute) if now.hour < 23 else time(0, now.minute) self.fields['available_from'].initial = default_from # 给available_till设置默认值为默认from时间加8小时 default_till = time(default_from.hour + 8, default_from.minute) if default_from.hour +8 <24 else time(default_from.hour+8-24, default_from.minute) self.fields['available_till'].initial = default_till class Meta: model = Room fields = ['available_from','available_till']
方法三:在模型字段中设置default值
如果希望所有使用该模型的表单都继承这个默认值,可以直接在models.py的字段里设置default参数:
from datetime import time class Room(models.Model): available_from = models.TimeField(default=time(9, 0)) # 默认9点 available_till = models.TimeField(default=time(18, 0)) # 默认18点
注意:如果你的ModelForm里重新定义了字段(像当前代码一样),需要确保表单字段没有覆盖模型的默认值,或者在表单里同步设置initial,否则模型的default可能不会生效。
内容的提问来源于stack exchange,提问作者Anshul Gupta
相关产品推荐
相关产品推荐

