6

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

4

2 回答 2

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对象(即经过身份验证的),您需要确保它可以为上述工作,或者您应该添加一些错误处理代码来处理它不存在的情况。

希望这可以帮助 :)

于 2012-04-09T08:29:07.893 回答
6

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

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

谢谢楼上的回答,对我也有帮助!

于 2014-02-11T19:30:44.963 回答