Javascript 清理日期字段从ajax调用返回到django视图

Javascript 清理日期字段从ajax调用返回到django视图,javascript,ajax,django,django-forms,Javascript,Ajax,Django,Django Forms,编辑:“类ProviderUpdateView(UpdateView)”的My def form_无效: 我可能会提出第二个问题,找出为什么这不在表单上呈现,而一些“必须填写此字段”可能与crispy表单有关不确定我是否编写了此部分,并且必须进行调查:/ 我有一个日期字段,它出现在ajax调用的数据字段中。我可以在views.py中很好地获取数据 dateJ = request.GET.get('date_joined_group') 这是伟大的,但当我试图把它扔进我的模型,它每次都死

编辑:“类ProviderUpdateView(UpdateView)”的My def form_无效:

我可能会提出第二个问题,找出为什么这不在表单上呈现,而一些“必须填写此字段”可能与crispy表单有关不确定我是否编写了此部分,并且必须进行调查:/

我有一个日期字段,它出现在ajax调用的数据字段中。我可以在views.py中很好地获取数据

dateJ = request.GET.get('date_joined_group')    
这是伟大的,但当我试图把它扔进我的模型,它每次都死了。我需要“清理”数据,我知道我的表格,当我只是在做标准的get post ops工作时,我会自动完成这项工作。当不使用表单而是使用ajax调用时,有没有一种方法可以调用这个automagic

我试过这个:

       dateObj = datetime.datetime.strptime(str(dateJ), '%m-%d-%Y')
然后在我的模型中:

grpProvInfo.date_joined_group = dateObj    
grpProvInfo.save()
这是有效的,直到我在表单上使用日期选择器,并将其作为2009年4月29日输入


因此,斜杠打破了我的“光滑修复”,这是一种更简单的方法,然后尝试解释所有的可能性,只是不确定如何从python中ajax调用的一个小def方法调用它。

因此,有几个不同的python库可以在很大程度上帮助您。这一个,允许您输入您希望能够解析的任意多个不同格式,并返回一个datetime对象。这将解决您的斜杠问题。另一条建议是,无论你的约会是如何输入的,都要以相同的格式发送。如果您使用django表单和date字段,您将自动获得(有效日期字符串的)验证,并且与dateparser结合使用将允许您安全地解析任何日期字符串


为了简单起见,您应该能够更改日期选择器的默认格式。但这并不是解决问题的真正答案

最简单的方法是在字符串出现之前修改字符串,或者在字符串出现时用类似的方法修改字符串
dateJ.replace(“/”,“-”)
这很正常,我必须弄清楚如何在javascript端进行验证,并将错误发送到完全内置于django中的表单:(不要这样做。表单本身应该能够通过字段接受多种格式。我想你说得一针见血,我确实使用django表单。但是这个表单特别是一个模式表单,它会时不时地弹出,我使用Ajax将所有数据发送到服务器或从服务器发送出去。因此,它似乎绕过了标准验证,或者我是mis唱一个我如何处理这个ajax调用的步骤。我可以发布代码,但不确定这在这个例子中是否有帮助。我也希望我可以在javascript端进行验证,任何错误都会以标准django验证的形式显示出来。因此,对于javascript端,您可以编写一个在用户单击submi时调用的方法这基本上是一个围绕ajax的包装器。除此之外,django的表单应该正确验证,无论它是否异步。你确实有一个专门处理异步调用的视图,对吗?是的,我有一个处理调用的视图。我想我不是苏re当呈现错误时。我没有编写表单,所以我正在跟踪内容…例如,它看起来像是一个未绑定的表单。但是它知道表单上的名称何时丢失,并且不会保存,并且会说填写字段(但我看不到必填字段)但是,这给了我一个想法,让javascript自己验证,如果发现了一些错误,只需使用jquery使错误看起来漂亮,然后执行“防止默认值”或“返回”或其他操作以避免提交。关闭以调试表单上未显示的基本错误:/n您看到了,因为默认情况下字段是必需的。啊,好的,我可以获取表单以验证我的日期,但我必须绑定表单,如果我在updateview而不是createview上崩溃,那么我必须继续修补,但这给了我一些想法,谢谢。我将接受答案。
grpProvInfo.date_joined_group = dateObj    
grpProvInfo.save()