2012-04-09 6 views
6

Wenn ein neues Element mit Tastypie erstellt wird, möchte ich es einem Benutzerattribut hinzufügen können, das ein Viele-zu-Viele-Feld ist. gerade jetzt sieht mein obj_create wie folgt aus:Tastypie obj_create - wie benutzt man ein neu erstelltes Objekt?

def obj_create(self, bundle, request=None, **kwargs): 
    return super(GoalResource, self).obj_create(bundle, request, user=request.user) 

Ich möchte das neue Objekt zu schaffen, aber wenn ich will es hinzufügen können, das Attribut goal_list des request.user. Aber was ich habe, wird sofort das Objekt in der Datenbank erstellen. Wie würde ich das Objekt erstellen und dann dem Attribut goal_list des Benutzers hinzufügen?

Antwort

10

Sie haben uns nicht Ihre Ressourcen-Definition zeigen, aber vorausgesetzt, Sie tastypie.resources.ModelResource als Basisklasse verwenden, sollte diese Arbeit:

def obj_create(self, bundle, request=None, **kwargs): 
    bundle = super(GoalResource, self).obj_create(
     bundle, request, user=request.user) 

    user = request.user 
    user.goals.add(bundle.obj) 
    user.save() 
    return bundle 

Dies ist, weil die obj_create Methode der ModelResource-Klasse gibt ein Bündel, das enthält das gespeicherte Objekt (bundle.obj) und Sie können dieses Objekt in Ihrer obj_create Methode wie gezeigt manipulieren und erst dann zurückgeben.

Ich habe auch angenommen, dass request.user ein gültiges User Objekt enthält (d. H. Authentifiziert), Sie müssen sicherstellen, dass es für oben funktioniert, oder Sie sollten einen Fehlerbehandlungscode für den Fall hinzufügen, wenn dies nicht der Fall ist.

this helps :)

5

Ich habe nicht genug Ruf kommentieren noch so dachte ich, ich würde eine zweite Antwort setzen. Die obige Antwort ist korrekt. Ich wollte nur hinzufügen, dass diese Anfrage nicht mehr im Aufruf von obj_create existiert. Sie können die aktuelle Anfrage über bundle.request Zugang:

http://django-tastypie.readthedocs.org/en/latest/resources.html#accessing-the-current-request

Danke für die Antwort oben, es half mir, wie gut!

+0

Answers überall müssen aus diesem Grund aktualisiert werden :) – teewuane