【发布时间】:2011-04-02 00:45:43
【问题描述】:
这是一种“我已经失去了 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 都增加了一个,正如假设的那样,但对象并未存储在 db 中。
当我执行时
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:
嗯,今天早上,似乎一切正常,但代码没有改变。我一点也不喜欢这个:(
【问题讨论】:
标签: javascript jquery python django orm