3

hydrateメソッドで許可されたユーザーオブジェクトを取得する必要があります。次のようなものです。

class SalepointResource(ModelResource):
  def hydrate(self, bundle):
    user = bundle.request.user

ただし、ここでのリクエストは空のHttpRequestオブジェクトであり、ユーザーは許可されていますが、ユーザーメソッドはありません。ユーザーオブジェクトを取得する方法はありますか?

4

3 に答える 3

0

tastypieで認証/承認を適切に設定しましたか?

于 2012-03-20T14:20:53.523 に答える
0

これが最善のアプローチかどうかはわかりませんが、ModelResourceクラスをサブクラス化し、そのメソッドの一部をオーバーライドすることで、この問題を回避しました。オブジェクト(を含む)にはメソッドのパラメーターがありますが、ModelResourceメソッドには渡されず、メソッドは。を呼び出します。オブジェクトをチェーンの最後まで渡すには、これらの各メソッドにいくつかの小さな変更を加える必要があります。requestuserobj_updatefull_hydratehydraterequest

メソッドの変更は簡単です。詳細に:

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

私はこれを徹底的にテストしていませんが、今のところうまくいくようです。それが役に立てば幸い。

于 2012-09-19T21:36:30.263 に答える
0

TastyPie 0.9.15を使用すると、次のように機能します。

def hydrate_user(self, bundle):
    bundle.obj.user = bundle.request.user
    return bundle

サブクラス化の必要はありませんModelResource。モデルとリソースは次のとおりですuserForeignKey見た目はシンプルですが、理解するのに時間がかかったので、回答として投稿します。

于 2013-07-29T01:20:50.443 に答える