Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.3k views
in Technique[技术] by (71.8m points)

django - Tastypie obj_create - how to use newly created object?

When a new item is created using Tastypie, I want to be able to add it to a user's attribute which is a many-to-many field. RIght now my obj_create looks like this:

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

I want to create the new object, but when I want to be able to add it to the request.user's attribute goal_list. But, what I have will immediately create the object in the database. How would I create the object and then add it to the user's goal_list attribute?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You didn't show us your resource definition, but assuming you are using tastypie.resources.ModelResource as your base class, this should work:

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

This is because the obj_create method of ModelResource class returns a bundle which contains the saved object (bundle.obj) and you can manipulate this object in your obj_create method as shown and only then return it.

I have also assumed that request.user contains a valid User object (i.e. authenticated), you need to make sure it does for above to work or you should add some error handling code for the case when it does not.

Hope this helps :)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...