request.POST['time'] 必须是日期字段()

2 投票
3 回答
582 浏览
提问于 2025-04-16 11:57

我刚接触Django,可能问的问题有点基础。

我有以下代码:

crush.time = request.POST['time']

这里的'time'是一个时间字段,我需要把它当作时间来处理,但我得到的却是crush.time是一个字符串。然后我在尝试处理的时候遇到了以下错误:

'unicode' object has no attribute 'hour'

3 个回答

1

POST多字典里存的是字符串,它并不知道Python里的数据类型。你需要把它解析成一个日期时间对象。可以去看看日期时间的相关文档。

1

假设你的 'time' 字段是以 H:M:S 或 H:M 的格式表示的,那么你可以创建一个 Django 表单来帮你处理这些数据(记住,你不一定需要输出这个表单):

在你的 forms.py 文件中:

from django import forms

class BasicTimeForm(forms.Form):
    time = forms.TimeField()

在你的视图中:

if request.method == 'POST': 
    form = forms.BasicTimeForm(request.POST)
    if form.is_valid():
        crush.time = form.cleaned_data['time']

在提交后,crush.time 现在应该包含一个 datetime.time 对象。

(改编自 http://docs.djangoproject.com/en/dev/topics/forms/

2

只需要使用Python的datetime库就可以把时间转换成时间对象:

datetime.datetime.strptime(request.POST['time'], '%H:%M:%S').time()

撰写回答