Django 1.8将DateTimeInput存储为unix时间戳



我在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方法操纵小部件?

通过子类化模型解决了这个问题。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},
        )

相关内容

  • 没有找到相关文章

最新更新