2012-04-09 13 views
6

Gdy nowy element jest tworzony za pomocą Tastypie, chcę móc dodać go do atrybutu użytkownika, który jest polem wielu do wielu. właśnie teraz mój obj_create wygląda następująco:Tastypie obj_create - jak korzystać z nowo utworzonego obiektu?

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

Chcę utworzyć nowy obiekt, ale kiedy chcę, aby móc dodać go do atrybutu goal_list w request.user użytkownika. Ale to, co mam, natychmiast utworzy obiekt w bazie danych. Jak utworzyć obiekt, a następnie dodać go do atrybutu goal_list użytkownika?

Odpowiedz

10

Nie pokazać nam swoją definicję zasobu, ale przy założeniu, że używasz tastypie.resources.ModelResource jako klasy bazowej, to powinno działać:

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 

To dlatego, że metoda ModelResource klasy obj_create zwraca paczkę, która zawiera zapisany obiekt (bundle.obj) i możesz manipulować tym obiektem w swojej metodzie obj_create, jak pokazano i tylko wtedy zwróć.

Założono również, że request.user zawiera poprawny obiekt User (tj. Uwierzytelniony), należy się upewnić, że powyższe działa, lub należy dodać kod obsługi błędu dla sprawy, gdy tak nie jest.

Nadzieja to pomaga :)

5

nie mam wystarczającej reputacji wypowiedzenia jeszcze więc pomyślałem Chciałbym umieścić drugą odpowiedź. Powyższa odpowiedź jest poprawna Chciałem tylko dodać, że żądanie nie istnieje już w wywołaniu obj_create. Możesz uzyskać dostęp do aktualnego żądania poprzez bundle.request:

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

Dzięki za odpowiedzi powyżej, to pomogło mi, jak dobrze!

+0

Odpowiedzi wszędzie muszą być aktualizowane z tego powodu :) – teewuane

Powiązane problemy