Это своего рода проблема / вопрос типа «Я уже потерял х часов отладки»: (
Следующий jS-код jQuery инициирует запрос 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
Этот код выполняется успешно (я делаю проверки на пустое или уже существующее имя, но здесь я не написал, чтобы быть более понятным), но новыйОбъект тега НЕ создан. Я даже получаю "" новый тег с идентификатором% s был создан ", напечатанный по приглашению devserver, и каждый раз ID увеличивается, как предполагается, но объекты не сохраняются в БД.
Когда я выполняю
new_tag = Tag()
new_tag.name = tagName
new_tag.save()
из оболочки Django, новый объект 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)
Update2 :
Хм, сегодня утром кажется, что все работает нормально, но код не изменился.Мне это совсем не нравится: (