Вы можете либо использовать заголовок Location (установленный Tastypie по умолчанию), либо вы можете попытаться заставить Tastypie отослать вновь созданную сущность обратно.Я считаю, что первый проще.Вы также можете взглянуть на соответствующий вопрос SO: Можно ли с помощью REST возвращать содержимое после POST?
Сначала вам нужно немного изменить объекты jQuery XHR,
// Required for reading Location header of POST responses.
var _super = $.ajaxSettings.xhr;
$.ajaxSetup({
xhr: function () {
var xhr = _super();
var getAllResponseHeaders = xhr.getAllResponseHeaders;
xhr.getAllResponseHeaders = function () {
var allHeaders = getAllResponseHeaders.call(xhr);
if (allHeaders) {
return allHeaders;
}
allHeaders = "";
$(["Cache-Control", "Content-Language", "Content-Type", "Expires", "Last-Modified", "Pragma", "Location"]).each(function (i, header_name) {
if (xhr.getResponseHeader(header_name)) {
allHeaders += header_name + ": " + xhr.getResponseHeader(header_name) + "\n";
}
});
return allHeaders;
};
return xhr;
}
});
Это необходимо, потому что ( после jQuery $ .ajax docs ):
В настоящее время из-за ошибки в Firefox, где .getAllResponseHeaders () возвращает пустую строку, хотя.getResponseHeader ('Content-Type') возвращает непустую строку, автоматическое декодирование ответов JSON CORS в Firefox с помощью jQuery не поддерживается.
Обойти это можно, переопределив jQuery.ajaxSettings.xhr следующим образом:
Затем вы можете прочитать заголовок в successCallback, вот так:
successCallback: errorAwareCall(function (data, t, textStatus, XMLHttpRequest) {
var loc = XMLHttpRequest.getAllResponseHeaders();
var pk = parseInt(loc.match(/\/(\d+)(\/)*/)[1]);
// Do something with the PK
})