无法从 Django 获取参数 URL
Unable to fetch parameters from Django URL
我正在使用 Django REST Framework,我想获取在 URL.
中输入的两个参数
我的 URL 是:
http://127.0.0.1:8000/api/v1/colleges/slug2/courses/sug1/
其中 'slug2' 和 'sug1' 是两个 slug 输入的参数。
我想在我的 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)
在你的 urls.py 中,我只看到 1 个鼻涕虫被传递 i.e slug not slug1
。所以,如果你想解析另一个 slug,那么你可能需要将它添加到你的 URLs 中,然后在视图中解析它。
如果你想让你的 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)),
实际上我也试图在参数中检索 lookup_field 的 slug。但它与模型相关而不是参数,在评论中正确指出。
所以我只是通过 ModelViewSet 中的 lookup_url_kwarg 字段访问它。
更多详情请参考:
this answer
我正在使用 Django REST Framework,我想获取在 URL.
中输入的两个参数我的 URL 是:
http://127.0.0.1:8000/api/v1/colleges/slug2/courses/sug1/
其中 'slug2' 和 'sug1' 是两个 slug 输入的参数。
我想在我的 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)
在你的 urls.py 中,我只看到 1 个鼻涕虫被传递 i.e slug not slug1
。所以,如果你想解析另一个 slug,那么你可能需要将它添加到你的 URLs 中,然后在视图中解析它。
如果你想让你的 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)),
实际上我也试图在参数中检索 lookup_field 的 slug。但它与模型相关而不是参数,在评论中正确指出。
所以我只是通过 ModelViewSet 中的 lookup_url_kwarg 字段访问它。
更多详情请参考: this answer