Django 1.8 DateTimeInput存储为UnixTimestamp

时间:2015-06-01 07:23:26

标签: django twitter-bootstrap datetime datetimepicker

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方法操作窗口小部件的方法?

1 个答案:

答案 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},
        )