首页 > 解决方案 > 无法从 Django URL 获取参数

问题描述

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

我的网址是:

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

其中“slug2”“sug1”是输入的两个slug参数。

我想在我的 ModelViewSet 中检索这两个参数

视图.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)

网址.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 并因此出现问题。

是否有任何特定的方法来获取这些参数。

提前致谢。

标签: djangodjango-rest-frameworkdjango-rest-viewsets

解决方案


试试这个

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)

在您的 urls.py 中,我只看到 1 个 slug 被通过i.e slug not slug1。因此,如果您想解析另一个 slug,那么您可能需要将其添加到您的 URL 中,然后在视图中解析它。如果您希望您的网址看起来像这样

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

然后你必须将你的 urls.py 更改为

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

推荐阅读