Django: Урлы необязательные параметры запроса
Urls.py:
app_name = 'main'
urlpatterns = [
path('',include(router.urls)),
path('player_id=<str:player>%season_id=<str:season>',views.MatchesList.as_view())
]
Views.py
class MatchesList(generics.ListAPIView):
serializer_class = MatchesSerializer
permissions = (IsAuthenticated)
def get_queryset(self):
player = self.kwargs['player']
season = self.kwargs['season']
if season is None:
queryset = Matches.objects.filter(player=player).all()
else:
queryset = Matches.objects.filter(player=player,season=season).all()
return queryset
Есть ли способ сделать запрос без параметра 'season'? Что-то вроде этого:
app_name = 'main'
urlpatterns = [
path('',include(router.urls)),
path('player_id=<str:player>',views.MatchesList.as_view())
]
Конечно. В DRF вы можете/должны использовать фильтрацию для этого.
В urls.py
у вас будет что-то вроде этого:
path('matches/<str:player_id>/', views.MatchesList.as_view())
И ваш URL будет выглядеть следующим образом:
https://yourhost.com/matches/42/?season=spring
Для season
вам придется реализовать фильтр (существует множество способов сделать это). Фильтры необязательны - если вы не передадите ?season=something
часть URL, он просто не будет применен.