在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。
有什么建议吗?
答案 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
无论如何都不是值,它是一个表单字段。