2012-04-09 17 views
6

Cuando se crea un nuevo artículo usando Tastypie, quiero poder agregarlo a un atributo de usuario que es un campo de muchos a muchos. Ahora mismo mi obj_create se parece a esto:Tastypie obj_create - cómo usar un objeto recién creado?

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

que desea crear el nuevo objeto, pero cuando quiero para poder añadirlo a goal_list atributo del request.user. Pero, lo que tengo inmediatamente creará el objeto en la base de datos. ¿Cómo crearía el objeto y luego lo agregaría al atributo goal_list del usuario?

Respuesta

10

que no nos muestran su definición de recursos, pero suponiendo que está utilizando tastypie.resources.ModelResource como su clase base, esto debería funcionar:

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 

Esto es porque el método de ModelResource clase obj_create devuelve un paquete que contiene el objeto guardado (bundle.obj) y puede manipular este objeto en su método obj_create como se muestra y solo luego devolverlo.

También he supuesto que request.user contiene un objeto válido User (es decir, autenticado), debe asegurarse de que funciona para lo anterior o debe agregar algún código de manejo de errores para el caso cuando no lo haga.

espero que esto ayude :)

5

no tengo la reputación suficiente para comentar todavía, así que pensé que le ponga una segunda respuesta. La respuesta anterior es correcta. Solo quería agregar que la solicitud ya no existe en la llamada obj_create. Puede acceder a la solicitud actual a través de bundle.request:

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

Gracias por la respuesta anterior, me ayudó también!

+0

Las respuestas en todas partes deben actualizarse debido a esto :) – teewuane

Cuestiones relacionadas