Джанго, Tastypie и получение новых данных объекта - PullRequest
4 голосов
/ 24 декабря 2011

Я немного играю с тяжелым клиентским приложением.

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

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

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

Я создаю новый объект и помещаю его в список.Пока все хорошо.

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

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

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

в другихсловами, рабочий процесс выглядит примерно так:

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

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

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

Спасибо!

1 Ответ

8 голосов
/ 14 января 2012

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

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

Затем вы можете просто прочитать ответ от вашего AJAX и расшифровать JSON (я пока не знаю о нокауте).

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

Надеюсь, это поможет

...