gpt4 book ai didi

python - django Rest Framework - 带有自定义 ListView 和 URL 参数的 ViewSet

转载 作者:行者123 更新时间:2023-12-03 18:30:14 25 4
gpt4 key购买 nike

我有以下设置:

我想列出特定年份的所有假期。这就是为什么我省略默认 ListView 并像这样实现我自己的 ListView :

class HolidayViewSet(mixins.RetrieveModelMixin, GenericViewSet):
@list_route()
def year(self, request, year=get_today().year):
public_holidays = self.get_queryset().filter(date__year=year)
page = self.paginate_queryset(public_holidays)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(public_holidays, many=True)
return Response(serializer.data)

如果我使用默认值/holiday/year/,我会得到当年的结果。

但是当我尝试传递一个参数时,我会得到一个 404。404 页面(在 Debug模式下)甚至向我显示了正确的 URL 模式:

api/v1/ ^holiday/year/$ [name='holiday-year']
api/v1/ ^holiday/year\.(?P<format>[a-z0-9]+)/?$ [name='holiday-year']

documentation不幸的是,这方面没有涵盖。

知道为什么我去 holiday/year/2017 的路线不起作用吗?

最佳答案

好的,我的解决方法是使用 django-filter

我的过滤器:

class HolidayFilter(filters.FilterSet):
"""
This filter can be used to filter holidays by different values in API views or viewsets.
See http://django-filter.readthedocs.io/en/1.1.0/guide/rest_framework.html
"""
year = filters.NumberFilter(name='date', lookup_expr='year')

class Meta:
model = Holiday
fields = ['date']

我的观点:

class HolidayListViewSet(ModelViewSet):

def list(self, request, *args, **kwargs):
# Apply filters
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
# Pagination
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
# Serializer
serializer = self.get_serializer(queryset, many=True)
# Response
return Response(serializer.data)

网址:

/api/v1/holiday/?year=2016

关于python - django Rest Framework - 带有自定义 ListView 和 URL 参数的 ViewSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49495404/

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