Не уверен, что это лучший подход, но я решил эту проблему, создав подкласс класса ModelResource
и переопределив некоторые из его методов. В ModelResource
объект request
(который содержит user
) является параметром метода obj_update
, но не передается методу full_hydrate
, который, в свою очередь, вызывает hydrate
. Вы должны внести несколько небольших изменений в каждый из этих методов, чтобы передать объект request
по всей цепочке.
Модификации метода тривиальны. В деталях:
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned, ValidationError
from tastypie.resources import ModelResource
from tastypie.exceptions import NotFound, BadRequest, InvalidFilterError, HydrationError, InvalidSortError, ImmediateHttpResponse
class MyModelResource(ModelResource):
def obj_create(self, bundle, request=None, **kwargs):
...
bundle = self.full_hydrate(bundle, request)
...
def obj_update(self, bundle, request=None, **kwargs):
...
bundle = self.full_hydrate(bundle, request)
...
def full_hydrate(self, bundle, request=None):
...
bundle = self.hydrate(bundle, request)
...
def hydrate(self, bundle, request=None):
...
return bundle
Затем сделайте свой ресурс подклассом этого нового класса и переопределите новую версию hydrate
:
class MyModelResource(MyModelResource):
class Meta:
queryset = MyModel.objects.all()
def hydrate(self, bundle, request):
bundle.obj.updated_by_id = request.user.id
return bundle
Я не проверял это полностью, но, похоже, пока работает. Надеюсь, поможет.
person
David Jones - iPushPull
schedule
19.09.2012