0

次のように定義されたUserResourceがあります。

class UserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'user'                                                                                                                       

        # No one is allowed to see all users
        list_allowed_methods = []
        detail_allowed_methods = ['get', 'put', 'patch']

        # Hide staff
        excludes = ('is_staff')

    def apply_authorization_limits(self, request, object_list):
        return object_list.filter(pk=request.user.pk)

    def prepend_urls(self):
        return [ url(r'^(?P<resource_name>%s)/$' % self._meta.resource_name, self.wrap_view('dispatch_detail'), name='api_dispatch_detail') ]

URI / user /に、現在のユーザーの詳細だけを返し、リストはまったく返さないようにします。私のソリューションでは、「このURIで複数のリソースが見つかりました」というエラーが発生します。実際、dispatch_listもあります。/ user /に戻り、現在のユーザーの詳細のみを処理するにはどうすればよいですか?

ありがとう

4

3 に答える 3

1

tastypie dispatch_detailをラップアラウンドするために独自のビューを作成する必要があります:

class UserResource(ModelResource):
  [...]

  def prepend_urls(self):
    return [ url(r'^(?P<resource_name>%s)/$' % self._meta.resource_name, self.wrap_view('current_user'), name='api_current_user') ]

  def current_user(self, request, **kwargs):
    user = getattr(request, 'user', None)
    if user and not user.is_anonymous():
        return self.dispatch_detail(request, pk=str(request.user.id))
于 2013-03-28T10:16:41.557 に答える
0

試す:

user = get_object_or_404(User, username=username)
于 2013-03-27T10:03:53.573 に答える
0

現在ログインしているユーザーのオブジェクトを取得するには、リクエストオブジェクトからこれをプルします。

user = request.user

また

user = User.Objects.get(username=user.username)

または@gylnからの回答を使用して

user = get_object_or_404(User, username=user.username)

明らかに、この方法でそれを行っている場合は、ユーザーがビューで認証されていることを確認してください。

このobject.filter関数を使用すると、結果が1つしかない場合でも、常にリストが返されます。一方、objects.getメソッドは1つの結果のみを返します。

于 2013-03-27T12:13:46.197 に答える