5 Stimmen

Django, Tastypie und das Abrufen der neuen Objektdaten

Ich spiele ein wenig mit der Heavy-Client-App.

Stellen Sie sich vor, ich habe dieses Modell:

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

Ich verwende Knockoutjs (aber ich denke, das ist nicht wichtig). Ich habe eine Liste (observableArray) mit Kategorien und ich möchte eine neue Kategorie erstellen.

Ich erstelle ein neues Objekt und schiebe es in die Liste. So weit, so gut.

Was ist mit der Speicherung in meiner Datenbank? Da ich tastypie verwende, kann ich einen POST an "/api/v1/category/" durchführen und voilà, die neue Kategorie ist in der DB.

Ok, aber... Ich habe die Seite nicht aktualisiert, also... wenn ich die neue Kategorie aktualisieren möchte, wie mache ich das?

Ich meine, wenn ich die Kategorien abrufen, kann ich die ID speichern, so dass ich ein Put zu '/api/v1/Kategorie/id' machen kann und die Änderungen zu speichern, aber... wenn ich eine neue Kategorie erstellen, die DB eine ID zuweisen, aber mein Javascript weiß nicht, dass id noch.

Mit anderen Worten, der Arbeitsablauf ist in etwa so:

ein Get machen > die vorhandenen Objekte (mit ihren IDs) auf eine Liste schieben > eine neue Kategorie erstellen > sie auf die Liste schieben > die vorhandene Kategorie speichern (die Kategorie hat keine ID im Javacript) > die Kategorie bearbeiten > Wie speichere ich die Änderungen?

Meine Frage ist also, was ist der gemeinsame Weg? Ich dachte an das Senden der Kategorie und das Abrufen der id irgendwie und weisen Sie es zu meinem Objekt auf js, um in der Lage sein, es später zu ändern. Das Problem ist, dass ein POST an den Server nichts zurückgibt.

In der Vergangenheit habe ich so etwas getan, senden Sie das Objekt per Post, speichern Sie es, rufen Sie es ab und senden Sie es zurück, auf der Erfolg-Methode abrufen die ID und weisen Sie es dem js-Objekt.

Danke!

9voto

jujule Punkte 10616

Tastypie wird mit einem always_return_data Option für Ressourcen.

Wenn always_return_data=True für Ihre Ressource, gibt die API bei POST/PUT immer das vollständige Objektereignis zurück, so dass Sie bei der Erstellung eines neuen Objekts die erstellte ID in derselben Anfrage erhalten können.

Sie können dann einfach lesen Sie die Antwort von Ihrem AJAX und dekodieren die JSON (ich weiß nicht über Knockout noch).

siehe das Dokument : http://readthedocs.org/docs/django-tastypie/en/latest/resources.html?highlight=always_return_data#always-return-data

Ich hoffe, das hilft

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X