使用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属性?
答案 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
感谢上面的回答,它也帮助了我!