Tastypie obj_create - 如何使用新创建的对象?

时间:2012-04-09 07:22:17

标签: django tastypie

使用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属性?

2 个答案:

答案 0 :(得分: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

这是因为obj_create类的ModelResource方法返回包含已保存对象(bundle.obj)的包,您可以在obj_create方法中操作此对象显示,然后才返回。

我还假设request.user包含一个有效的User对象(即经过身份验证的对象),您需要确保它在上面工作,或者您应该为该情况添加一些错误处理代码不

希望这会有所帮助:)

答案 1 :(得分:6)

我没有足够的声誉发表评论,所以我想我会给出第二个答案。上面的答案是正确的我只是想在obj_create调用中添加该请求不再存在。您可以通过bundle.request访问当前请求:

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

感谢上面的回答,它也帮助了我!