【问题标题】:django: reading from database after form submissiondjango:表单提交后从数据库中读取
【发布时间】:2015-08-26 01:13:58
【问题描述】:

我在 django 模板中有一个表单,它在提交时调用 javascript 函数:

<input name="button2" type="submit" class="test" id="button2" value="submit"
       onclick="checkSubmitStatus();"/>

表单提交后,python视图中的一些代码,将表单中的数据写入数据库。喜欢:

if request.method == 'POST':
    customer_data = Customers(CustomerID=1, CustomerName=request.POST['textfield1'])
    customer_data.save()
    return HttpResponse(status=204)

在 javascript 函数中,我使用 ajax 从服务器获取一些数据:

<script type="text/javascript">
    function checkSubmitStatus() {
        $.ajax({
            url: "CustomerData",
            type: 'get',
            datatype: 'html',
            async: false,
            success: function(data) {
                x = data;
            }
        });
            Alert(x);
    }

当 CustomerData 从 DB 中读取数据时:

return HttpResponse(Customers.objects.get(CustomerID=1).CustomerName)

我希望 CustomerData 提供修改后的数据(我在模板表单中输入的数据),同时它返回之前的数据。当我刷新页面时,我可以看到更新的数据。所以我确定表单数据已写入数据库,但脚本显示的数据很破旧。

【问题讨论】:

  • 哪个视图在做return HttpResponse(Customers.objects.get(CustomerID=1).CustomerName)?谁触发了该网址?
  • CustomerData(在 ajax 代码中调用)@TheMonk
  • 有点混乱:你说表单提交按钮调用函数checkSubmitStatus()你还说那个js函数中的ajax调用返回return HttpResponse(Customers.objects.get(CustomerID=1).CustomerName)的视图?
  • @TheMonk 感谢您的关注。是的,有两种观点。其中之一提供模板的全部信息。另一种只是在表单提交后返回一个数据用于ajax部分。

标签: django database forms django-models django-views


【解决方案1】:

这段代码没有多大意义。您的 JS 函数在提交时被调用;也就是说,在单击提交按钮的位置。但是此时数据还不存在,因为你还没有提交表单;在任何情况下,任何 Ajax 调用都会立即被提交操作替换,因此永远不会调用回调。

我不明白您为什么使用这种混合形式的 POST / Ajax GET。通过 Ajax 提交表单并在该调用中返回更新的数据;或者,正常提交表单,并在提交的标准 HTML 响应中返回更新后的数据。

【讨论】:

  • 非常感谢。你说的对。表单尚未提交,我不知道如何在调用之前强制提交表单。 @丹尼尔-罗斯曼
  • 这就是为什么我说不要那样做。通过 Ajax 提交整个内容并在同一个调用中取回数据,通过标准 HTML 表单提交整个内容并在整个页面响应中取回数据。
  • 你的意思是没有办法在django模板中提交表单,然后在表单提交后调用一个函数? @丹尼尔-罗斯曼
猜你喜欢
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
  • 2021-12-20
  • 2018-06-13
  • 2021-09-20
  • 1970-01-01
相关资源
最近更新 更多