gpt4 book ai didi

python - Django Rest Framework - AssertionError 修复您的 URL conf,或在 View 上正确设置 `.lookup_field` 属性

转载 作者:太空狗 更新时间:2023-10-30 00:24:50 26 4
gpt4 key购买 nike

我试图返回特定于用户的单个对象(不是查询集),而不必在请求的 URL 中指定标识符/pk。每个用户都有一个组织 FK。

http://website/organisation 而不是 http://website/organisation/1

我收到以下错误,因为它需要这个标识符:

AssertionError:应使用名为“user__organisation_id”的 URL 关键字参数调用 View OrganisationDetail。修复您的 URL 配置,或正确设置 View 上的 .lookup_field 属性。

在使用 RetrieveModelMixin/GenericAPIView 时我需要如何指定/指定什么,以便它返回由 FK 链接的单个对象?

我的 View 类:

class OrganisationDetail(
mixins.RetrieveModelMixin, mixins.UpdateModelMixin,generics.GenericAPIView
):
serializer_class = OrganisationDetailSerializer
lookup_field = 'pk' # I know this is the default and there's no need to specify

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)

相关网址:

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

最佳答案

对于详细 View ,您需要覆盖 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

关于python - Django Rest Framework - AssertionError 修复您的 URL conf,或在 View 上正确设置 `.lookup_field` 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43859053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com