我将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 / return /仅处理当前用户的详细信息?
由于
答案 0 :(得分: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))
答案 1 :(得分:0)
尝试:
user = get_object_or_404(User, username=username)
答案 2 :(得分:0)
要获取当前登录用户的对象,您可以从请求对象中提取该对象。
user = request.user
或
user = User.Objects.get(username=user.username)
或使用@gyln的答案
user = get_object_or_404(User, username=user.username)
显然,如果您这样做,请确保在视图中对用户进行身份验证。
即使只有一个结果,使用object.filter
函数也会返回一个列表;而objects.get
方法只返回一个结果。