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

Python request.POST[';time';]必须是日期字段(),python,django,Python,Django,我对django很陌生,也许我在问一些非常基本的问题 我有以下代码: crush.time = request.POST['time'] 此“time”post值是一个时间字段,我需要作为时间值进行处理,但我得到的只是crush.time是一个字符串,然后我在尝试处理时出现以下错误: 'unicode' object has no attribute 'hour' POST multidictionary包含字符串-它不知道python数据类型。您必须将其解析为datetime对象。查看da

我对django很陌生,也许我在问一些非常基本的问题

我有以下代码:

crush.time = request.POST['time']
此“time”post值是一个时间字段,我需要作为时间值进行处理,但我得到的只是crush.time是一个字符串,然后我在尝试处理时出现以下错误:

'unicode' object has no attribute 'hour'

POST multidictionary包含字符串-它不知道python数据类型。您必须将其解析为datetime对象。查看datetime文档。

假设“时间”字段的格式为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


(改编自)

只需使用Python
datetime
库转换为时间对象:

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

没有其他方法不使用此类实现吗?我只想将此字符串解析为datetime对象。。解析一个简单的对象似乎需要做很多工作。通过使用ModelForm而不是常规表单,您可以稍微简化一些事情(请参阅django文档)。无论如何,您都应该进行表单验证,而不是直接设置
crush.time=request.POST['time']
,因为一些用户将不可避免地在表单中输入时间时出错,如果处理不当,他们只会看到500个错误。