Django 1.8 DateTimeInput存储为UnixTimestamp
Django 1.8中的DateTimeInput字段有问题 使用以下表格:Django 1.8 DateTimeInput存储为UnixTimestamp,django,twitter-bootstrap,datetime,datetimepicker,Django,Twitter Bootstrap,Datetime,Datetimepicker,Django 1.8中的DateTimeInput字段有问题 使用以下表格: def\uuuu init\uuuu(self,*args,**kwargs): “”“用于更改字段行为的附加初始化函数” """ super(UpdateMaintenanceForm,self)。\uuuuuu初始化(*args,**kwargs) self.fields['name'].widget=forms.TextInput(attrs={'class':'form control'}) self.fiel
def\uuuu init\uuuu(self,*args,**kwargs):
“”“用于更改字段行为的附加初始化函数”
"""
super(UpdateMaintenanceForm,self)。\uuuuuu初始化(*args,**kwargs)
self.fields['name'].widget=forms.TextInput(attrs={'class':'form control'})
self.fields['description']=forms.CharField(
required=False,widget=forms.Textarea(attrs={'class':'formcontrol'})
)
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\u since']=datetime.fromtimestamp(self.initial['active\u since']).strftime(“%d.%m.%Y%H:%m”)
self.initial['active\u till']=datetime.fromtimestamp(self.initial['active\u till']).strftime(“%d.%m.%Y%H:%m”)
我将日期作为unix时间戳存储在数据库中。
添加日期时,我收到错误消息“输入有效日期/时间”。进入调试器时,我发现错误来自为IntegerFields定义的to_python方法。问题对我来说很清楚,我不能将datetime对象添加到整数字段中。但我不想将日期作为日期时间存储到数据库中。因此,我需要修改to_python方法,将datetime对象转换为unix时间戳。
最好的方法是什么?为我的模型编写一个自定义字段,或者是否有方法使用own to_python方法操作小部件?通过对模型进行子类化解决了这个问题。Integerfield并添加own to_python转换: 类UnixDateTime(models.IntegerField):
通过将models.Integerfield子类化并添加own 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},
)