2012-04-09 68 views
6

当使用Tastypie创建新项目时,我希望能够将其添加到用户的属性中,该属性是多对多字段。 现在我obj_create看起来是这样的:Tastypie obj_create - 如何使用新创建的对象?

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

我要创建新的对象,但是当我希望能够将其添加到request.user的属性goal_list。但是,我所拥有的将立即在数据库中创建对象。我将如何创建该对象,然后将其添加到用户的goal_list属性中?

回答

10

你没告诉我们你的资源的定义,但假设你使用tastypie.resources.ModelResource为你的基类,这应该工作:

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 

这是因为ModelResource类的obj_create方法返回一个包含包已保存的对象(bundle.obj),并且您可以按照所示方法在您的obj_create方法中操作此对象,然后才能返回它。

我还假设request.user包含一个有效的User对象(即已验证),您需要确保它对上面的工作起作用,否则应该添加一些错误处理代码。

希望这有助于:)

相关问题