And*_*ewO 5 python django django-rest-framework
我试图返回特定于用户的单个对象(不是查询集)而不必在请求的URL中指定标识符/ pk.每个用户都有一个组织FK.
即http://网站/组织,而不是http:// website/organization/1
我收到以下错误,因为它期望这个标识符:
AssertionError: Expected view OrganisationDetail to be called with a URL keyword argument named "user__organisation_id". Fix your URL conf, or set the.lookup_fieldattribute on the view correctly.
在使用RetrieveModelMixin/GenericAPIView时,如何/我需要指定它返回由FK链接的单个对象?
我的观点类:
class OrganisationDetail(mixins.RetrieveModelMixin, mixins.UpdateModelMixin,generics.GenericAPIView):
serializer_class = OrganisationDetailSerializer
lookup_field = 'pk' #yes, I know this is the default and there's no need to speciy
def get_queryset(self):
return Organisation.objects.filter(pk=self.request.user.organisation_id)
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
相关网址:
url(r'^api/v1/organisation/$', OrganisationDetail.as_view()),
我的模特:
class Person(AbstractUser):
organisation = models.ForeignKey(Organisation, related_name='members', null=True)
is_admin = models.BooleanField(default=False)
def __str__(self):
return self.first_name + " " + self.last_name + " - " + self.email
Run Code Online (Sandbox Code Playgroud)
mun*_*nsu 16
您需要覆盖get_object(),而不是覆盖get_queryset()详细视图.您仍然需要权限检查,因此我建议您浏览源代码.首先删除你的get_queryset()方法然后尝试这个为初学者:
# inside OrganisationDetail
queryset = Organisation.objects.all()
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
# make sure to catch 404's below
obj = queryset.get(pk=self.request.user.organisation_id)
self.check_object_permissions(self.request, obj)
return obj
Run Code Online (Sandbox Code Playgroud)