Django 1.8中的DateTimeInput字段存在问题。
使用以下表格:
def __init__(self, *args, **kwargs):
"""Additional init function for changing field behavior
"""
super(UpdateMaintenanceForm, self).__init__(*args, **kwargs)
self.fields['name'].widget = forms.TextInput(attrs={'class': 'form-control'})
self.fields['description'] = forms.CharField(
required=False, widget=forms.Textarea(attrs={'class': 'form-control'})
)
self.fields['active_since'] = forms.DateTimeField(
input_formats=['%d.%m.%Y %H:%M'], widget=forms.DateTimeInput(attrs={'class': 'form-control'})
)
self.fields['active_till'] = forms.DateTimeField(
input_formats=['%d.%m.%Y %H:%M'], widget=forms.DateTimeInput(attrs={'class': 'form-control'})
)
self.initial['active_since'] = datetime.fromtimestamp(self.initial['active_since']).strftime("%d.%m.%Y %H:%M")
self.initial['active_till'] = datetime.fromtimestamp(self.initial['active_till']).strftime("%d.%m.%Y %H:%M")
我将日期存储为数据库中的unix时间戳。 添加日期时,我收到错误消息“输入有效日期/时间”。进入调试器后,我发现Error是从为IntegerFields定义的to_python方法引发的。问题非常清楚,我无法将datetime对象添加到整数字段。但我不希望将日期作为日期时间存储到数据库中。因此,我需要修改to_python方法以将datetime对象转换为unix时间戳。 最好的方法是什么?为我的模型编写自定义字段,或者是否有使用自己的to_python方法操作窗口小部件的方法?
答案 0 :(得分:0)
通过继承models.Integerfield并添加自己的to_python转换解决了这个问题:
类UnixDateTime(models.IntegerField):
def to_python(self, value):
if value is None:
return value
if isinstance(value, int):
return value
if isinstance(value, datetime):
return mktime(value.timetuple())
else:
raise exceptions.ValidationError(
self.error_messages['invalid'], code='invalid', params={'value': value},
)