【发布时间】:2018-03-01 06:52:16
【问题描述】:
我是 Django 框架的新手,有一件事困扰着我。
我想要一个简单的休息电话:
www.abc.com/users/1/cantonments/1/
如果我在 url 模式中使用“pk”,一切都可以开箱即用(pk、pk1、pk2....)。 但是我有一些权限功能,它期望用户和营地的 kwargs 中的参数以“upk”和“cpk”的形式出现。因此,如果我将 pk 更改为 upk 一切都会中断。不知何故,网址需要 ONE pk。
这行得通:
url(r'^users/(?P<pk>[0-9]+)/cantonments/(?P<cpk>[0-9]+)/$',
views.CantonmentDetail.as_view()),
这不是:
url(r'^users/(?P<upk>[0-9]+)/cantonments/(?P<cpk>[0-9]+)/$',
views.CantonmentDetail.as_view()),
有没有什么办法可以让 url 模式不需要一个 pk 条目?
附:错误:
Expected view CantonmentDetail to be called with a URL keyword argument named "pk". Fix your URL conf, or set the `.lookup_field` attribute on the view correctly.
编辑:
我的观点很简单:
# Authenticated User can show Cantonment Detail
class CantonmentDetail(generics.RetrieveAPIView):
serializer_class = serializers.CantonmentSerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
return Cantonment.objects.filter(pk=self.kwargs['cpk'])
编辑2:
我将 get_queryset 更改为获取对象,它可以工作。
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
obj = queryset.get(pk=self.kwargs['cpk'])
return obj
编辑3: 使用
lookup_url_kwarg = "cpk"
在课堂上也可以。
【问题讨论】:
-
发表你的看法?
-
你的 view.py 可能有问题 get 参数可以添加这个
-
已经here讨论清楚了
标签: django parameters django-rest-framework url-pattern