无法从Django URL中获取参数



我正在使用Django REST框架,我想获取在URL中输入的两个参数。

我的URL是:

http://127.0.0.1:8000/api/v1/colleges/slug2/courses/sug1/

"slug2">

,"sug1">是否输入了两个段塞参数。

我想在ModelViewSet

中检索这两个参数views.py

class CollegeCourseViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Course.objects.all()
lookup_field = 'slug'
def get_serializer(self, *args, **kwargs):
if self.action == 'retrieve':
slug1 = self.kwargs.get('slug1')
slug2 = self.kwargs.get('slug2')
print(slug2)
queryset = Course.objects.filter(slug=slug2)
return Response(CollegeCourseSerializer(queryset, many=True).data, status=status.HTTP_200_OK)

urls . py

router = routers.DefaultRouter()
router.register(r'courses', CollegeCourseViewSet, basename='college_course_list')
urlpatterns = [
path('api/v1/colleges/<slug:slug>/', include(router.urls)),
]

但slug2输出None,因此出现问题。

是否有特定的方法可以获得这些参数

提前感谢。

试试这个

def get_serializer(self, *args, **kwargs):
if self.action == 'retrieve':
slug1 = self.kwargs.get('slug1') 
slug2 = self.kwargs.get('slug2')
queryset = Course.objects.filter(slug2=slug2)
return Response(CollegeCourseSerializer(queryset, many=True).data, status=status.HTTP_200_OK)

在你的url .py中,我只看到1个鼻涕虫通过i.e slug not slug1。如果你想解析另一个slug你可能需要在url中添加那个,然后在视图中解析它。如果你想让你的URL看起来像这样

http://127.0.0.1:8000/api/v1/colleges/slug2/courses/slug1/

然后将url .py改为

path('api/v1/colleges/<slug:slug2>/course/<slug:slug1>/', include(router.urls)),

实际上,我试图在参数中检索lookup_field的段塞。但它与模型有关,而不是参数,在注释中正确地指出了这一点。

所以我只是通过ModelViewSet中的lookup_url_kwarg字段访问它。

详情请参阅:这个答案

相关内容

  • 没有找到相关文章

最新更新