2012-04-09 5 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) 

Я хочу создать новый объект, но когда я хочу, чтобы иметь возможность добавить его в атрибут goal_list в request.user в. Но то, что у меня есть, сразу создаст объект в базе данных. Как я могу создать объект, а затем добавить его в атрибут 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 

Это потому, что obj_create метод ModelResource класса возвращает пакет, который содержит сохраненный объект (bundle.obj), и вы можете манипулировать этим объектом в своем методе obj_create, как показано на рисунке, и только затем вернуть его.

Я также предположил, что request.user содержит действительный объект User (т. Е. Аутентифицированный), вам нужно убедиться, что он работает для выше, или вы должны добавить код обработки ошибок для случая, когда это не так.

Надеется, что это помогает :)

5

Я не хватаю репутации комментировать еще, поэтому я решил, я бы поставил второй ответ. Ответ выше правильный Я просто хотел добавить, что запрос больше не существует в вызове obj_create. Вы можете получить доступ к текущему запросу через bundle.request:

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

Спасибо за ответ выше, он помог мне, как хорошо!

+0

Ответы везде должны быть обновлены из-за этого :) – teewuane

Смежные вопросы