2011-12-24 2 views
4

Я немного играю с приложениями с тяжелым клиентом.Django, Tastypie и получение новых данных объекта

Представьте меня есть эта модель:

class Category(models.Model): 
    name = models.CharField(max_length=30) 
    color = models.CharField(max_length=9) 

Im используя knockoutjs (но я предполагаю, что это не важно). У меня есть список (observableArray) с категориями, и я хочу создать новую категорию.

Я создаю новый объект, и я нажимаю его на список. Все идет нормально.

Как насчет сохранения его на моем дБ? Поскольку я использую tastypie, я могу сделать POST в '/ api/v1/category /' и voilà, новая категория находится в БД.

Хорошо, но ... Я не обновляю страницу, поэтому ... если я хочу обновить новую категорию, как я это делаю?

Я имею в виду, когда я получаю категории, я могу сохранить идентификатор, чтобы я мог сделать put в '/ api/v1/category/id' и сохранить изменения, но ... когда создаю новую категорию , DB присваивает ему идентификатор, но мой javascript еще не знает этого идентификатора.

другими словами, рабочий процесс что-то вроде:

сделать получить> раздвинуть существующие объекты (с их идентификаторами) в списке> создать новую категорию> нажмите на него в списке> сохранить существующую категорию (категория не имеет идентификатора на javacript)> отредактируйте категорию> Как сохранить изменения?

Итак, мой вопрос: какой общий путь? Я подумал о том, чтобы отправить категорию и как-то восстановить идентификатор, и назначить его моему объекту на js, чтобы потом его модифицировать. Проблема в том, что создание POST на сервере ничего не возвращает.

В прошлом я делал что-то подобное, отправлял объект через сообщение, сохранял его, извлекал и отправлял обратно, по методу успеха извлекал идентификатор и назначал его объекту js.

Спасибо!

ответ

8

Tastypie поставляется с опцией always_return_data для ресурсов.

При использовании always_return_data=True для вашего ресурса API всегда возвращает полное событие объекта в POST/PUT, так что при создании нового объекта вы можете получить созданный идентификатор по тому же запросу.

После этого вы можете просто прочитать ответ от своего AJAX и декодировать JSON (я еще не знаю о нокауте).

посмотреть документ: http://readthedocs.org/docs/django-tastypie/en/latest/resources.html?highlight=always_return_data#always-return-data

Надеется, что это помогает