【问题标题】:Cleaning date field returned to django view from ajax call从 ajax 调用返回到 django 视图的清洁日期字段
【发布时间】:2019-06-03 17:04:16
【问题描述】:

编辑:我的 `class ProviderUpdateView(UpdateView) 的 def form_invalid:

  def form_invalid(self, form):
    print("form is invalid")
    print(form.errors)
    return HttpResponse("form is invalid.. this is just an HttpResponse object") 

我可能会提出第二个问题,以弄清楚为什么这没有在表单上呈现,但有些“必须填写此字段是”可能与脆的表单有关,不确定我没有写这部分并且有调查一下:/

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

dateJ = request.GET.get('date_joined_group')    

这很棒,但是当我尝试将它扔进我的模型时,它每次都会死掉。我需要“清理”数据,当我只是在执行标准的 get post ops 工作并自动执行此操作时,我知道我的表单。有没有一种方法可以在不使用表单内容而是使用 ajax 调用时调用这个自动魔法?

我试过了:

       dateObj = datetime.datetime.strptime(str(dateJ), '%m-%d-%Y')

然后在我的模型中:

grpProvInfo.date_joined_group = dateObj    
grpProvInfo.save()

这很有效,直到我在表单上使用日期选择器,将其输入为 2009 年 4 月 29 日

所以斜线破坏了我的“巧妙修复”,必须是一种更简单的方法,然后尝试考虑所有可能性,只是不确定如何从我的 python 中的 ajax 调用的一个小 def 方法调用它。

【问题讨论】:

  • 最简单的方法是在字符串进入之前修改它,或者在它到达你的时候用这样的东西修改字符串。 dateJ.replace('/', '-')
  • 这很好用,我必须弄清楚如何在 javascript 端进行验证并将错误发送到所有内置于 django 的表单:(
  • 不要那样做。表单本身应该能够通过字段的input_formats attribute 接受多种格式。

标签: javascript ajax django django-forms


【解决方案1】:

因此,有一些不同的 Python 库可以为您提供很大帮助。这个dateparser 允许您输入尽可能多的不同格式来解析,并返回一个日期时间对象。这将解决您的斜杠问题。另一条建议是始终以相同的格式提供您的日期,无论它是如何输入的。如果您使用 django 表单和日期字段,您将自动获得(有效日期字符串的)验证,并且结合 dateparser 应该可以让您安全地解析任何日期字符串。

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

【讨论】:

  • 我认为你一针见血,我确实使用 django 表单。但这个表单尤其是一个模态表单,它不时弹出,我使用 Ajax 向服务器发送和从服务器发送所有数据。所以它似乎绕过了标准验证,或者我错过了如何处理这个 ajax 调用的步骤。我可以发布代码,但不确定在这种情况下是否有帮助。我还希望我可以在 javascript 端进行验证,并且任何错误都会使它们以标准 django 验证之类的形式显示。
  • 因此,对于 javascript 方面,您可以编写一个在用户单击提交时调用的方法,该方法验证并在有效时发送,否则会抱怨。这基本上是 ajax 的包装。除此之外,django 的表单应该正确验证,无论它是否是异步的。您确实有专门处理异步调用的视图,对吗?
  • 是的,我有一个处理呼叫的视图。我想我不确定何时呈现错误。我没有写表格,所以我正在追踪一些东西......例如看起来它是一个未绑定的表格。然而,它知道表单上的名称何时丢失并且不会保存,并且会说填写该字段(但我认为不需要在哪里)。它给了我一个想法,让 javascript 进行我自己的验证并只使用 jquery如果发现一些错误并防止默认错误,使错误看起来很漂亮?或返回或避免提交的东西。关闭以调试现在未显示在表单上的基本错误:/
  • 您会看到这一点,因为默认情况下需要字段。 docs.djangoproject.com/en/2.1/ref/forms/fields/#required
  • 嗯,好吧,我可以获取表单来验证我的日期,但我必须绑定表单,如果我在 updateview 而不是 createview 上崩溃,所以我必须继续修补,但这给了我一些想法谢谢。我会接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 2020-12-10
  • 1970-01-01
  • 2015-12-18
  • 2013-08-11
  • 2023-03-08
相关资源
最近更新 更多