Мне нужна следующая логика: Пользователь отправляет объекты на сервер, но мне нужно, чтобы объекты, которые он разместил ранее, удалялись до создания новых объектов. Есть ли какой-то метод, который называется, например. перед методом Hydrate(), в котором я мог бы получить доступ к объекту авторизованного пользователя?
Как запустить метод, который будет выполняться перед гидратом в django-tastypie
Ответы (1)
Если ваша проблема связана с созданием, вы можете переопределить метод obj_create. Ему предоставляется объект запроса, поэтому вы можете получить доступ к request.user. Что-то вроде этого должно работать для вас:
class SomeResource( ... ):
def obj_create(self, bundle, request=None, **kwargs):
user = request.user if request else None
# ...
if user:
# delete objects here
# ...
super( SomeResource, self ).obj_create( bundle, request, **kwargs )
person
kgr
schedule
21.03.2012
obj_create будет запускаться для каждого объекта, и мне нужно запустить этот код только один раз, в начале обработки запроса...
- person Kirill Bubochkin; 22.03.2012
Затем переопределите dispatch() и поместите свой код где-нибудь перед response = method(request, **kwargs). У вас также есть запрос, но он выполняется один раз для каждого запроса.
- person kgr; 22.03.2012
Да, это может сработать. Также я нашел другой способ: переопределить patch_list(). К сожалению, либо в dispatch(), либо в patch_list() у меня есть объект запроса до авторизации, поэтому у меня нет объекта User. Но это частично решает мою проблему.
- person Kirill Bubochkin; 26.03.2012
dispatch() выполняет аутентификацию и авторизацию, поэтому, возможно, если вы добавите свой код в нужное место, он будет работать (после аутентификации)? Другая идея, которую я получил, состоит в том, чтобы изменить obj_create() (что логически является хорошим местом), но где-то иметь флаг, который обозначает, является ли это первым или нет созданием в данном запросе (чтобы избежать проблемы с несколькими вызовами, которые вы упомянули). Надеюсь это поможет :)
- person kgr; 26.03.2012