gpt4 book ai didi

javascript - 无法在 Ajax 发布请求中创建新的 Django 模型对象

转载 作者:行者123 更新时间:2023-11-29 22:39:50 25 4
gpt4 key购买 nike

这是一种“我已经花了 x 个小时调试这个”的问题/问题 :(

下面的jQuery js代码是点击按钮发起POST请求

$("#btn_create_tag").click(function(evt) {
$.post("/tag/createAjax", {
tagname: $("#txt_tag_name").val()
},
function(data) {
}
);
});

在此调用上执行的 Django 代码是:

@suppress_logging_output
@login_required
def createAjax(request):
if request.is_ajax() and request.method == 'POST':
tagName = request.POST["tagname"]
new_tag = Tag()
new_tag.name = tagName
new_tag.save()
print "new tag with id %s has been created" % new_tag.id

该代码已成功执行(我正在检查空名称或已经存在的名称,但没有在此处写得更清楚),但未创建新的 Tag 对象。我什至在 devserver 的提示符上打印了“已创建 ID 为 %s 的新标签”,并且每次 ID 都增加一个,正如预期的那样,但对象未存储在数据库中。

当我执行

new_tag = Tag()
new_tag.name = tagName
new_tag.save()

在 Django shell 中,会定期创建新的 Tag 对象,但在 jQuery 请求中,不会创建它。

知道哪里出了问题,要检查什么,如何调试....

后面的数据库是 PostgresSQL 8.3。

欢迎任何建议:)

更新:

我写的 UnitTest 正在运行:

class AjaxTestCase(TestCase):
def testAjaxCreateTag(self):
tagNum = Tag.objects.filter(name="TEST_TAG").count()
self.assertEqual(tagNum, 0)
c = Client()
c.post('/lookup/tag/createAjax', {'tagname': 'TEST_TAG'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
tagNum = Tag.objects.filter(name="TEST_TAG").count()
self.assertEqual(tagNum, 1)

更新2:

嗯,今天早上好像一切正​​常,就是代码没变。我一点也不喜欢这个:(

最佳答案

这听起来很奇怪。你能仔细检查你的数据库设置吗?确保您在 settings.py 中使用正确的数据库?还使用 Django 的 test client 编写单元测试来练习代码.在您的测试方法中,请记住发送 HTTP_X_REQUESTED_WITH header 以使 is_ajax() 正常工作。

关于javascript - 无法在 Ajax 发布请求中创建新的 Django 模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3537399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com