TypeError:-:“ DateTimeField”和“ DateTimeField”的不受支持的操作数类型

时间:2019-02-04 21:01:31

标签: django python-3.x datetime

在Django 2.1类中,我有以下等式:

import datetime
class FormBacktest(forms.Form):
     dateStart= forms.DateTimeField(label="Date Start", widget=DateTimePickerInput()
    dateEnd= forms.DateTimeField(label="Date End", widget=DateTimePickerInput()
    timeInMin = int((dateEnd-dateStart).total_seconds()/60)

我从the documentation知道DateTimeField是datetime.datetime实例,因此应克服this question

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

好吧,DateTimeField是一个表单字段,而不是datetime实例。但是,当您从该字段获取输入时,将得到一个datetime对象。您可以从cleaned_data访问其值,例如:

# in view

def someview(request):
   form = FormBacktest(request.POST or None)
   if request.method == "POST": # its a post request
       if form.is_valid():
           date_start = form.cleaned_data.get('dateStart')
           date_end = form.cleaned_data.get('dateEnd')
           difference= date_end - date_start  # time delta object

请检查documentation,以获取有关如何从表单获取数据的更多详细信息。另外,请从表单中删除timeInMin

答案 1 :(得分:0)

对于您要完成的工作,我有些困惑,但我会尽力提供帮助。似乎您正在混淆表单和模型实例。

如果您想在表单上显示timeInMin,则需要将其设置为Integer字段(可能很小),然后使用javascript进行数学运算,并在用户输入开始和结束日期。

如果您要在数据库中为模型实例设置timeInMin的提交状态,并且不关心在更新表单时使用表单上的Javascript更新值,则只需在您的表单处理程序视图,甚至覆盖模型的save方法。

现在拥有的内容是,DateEnd不会在您尝试引用它时实例化,并且DateEnd无论如何都不是值,它是一个表单字段。