hydrateメソッドで許可されたユーザーオブジェクトを取得する必要があります。次のようなものです。
class SalepointResource(ModelResource):
def hydrate(self, bundle):
user = bundle.request.user
ただし、ここでのリクエストは空のHttpRequestオブジェクトであり、ユーザーは許可されていますが、ユーザーメソッドはありません。ユーザーオブジェクトを取得する方法はありますか?
tastypieで認証/承認を適切に設定しましたか?
これが最善のアプローチかどうかはわかりませんが、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
私はこれを徹底的にテストしていませんが、今のところうまくいくようです。それが役に立てば幸い。
TastyPie 0.9.15を使用すると、次のように機能します。
def hydrate_user(self, bundle):
bundle.obj.user = bundle.request.user
return bundle
サブクラス化の必要はありませんModelResource
。モデルとリソースは次のとおりですuser
。ForeignKey
見た目はシンプルですが、理解するのに時間がかかったので、回答として投稿します。