Я хочу иметь ДВА РАЗНЫХ представления (например, один реализует только метод GET, другой реализует только метод POST), но который будет иметь тот же URL: GET /tournament/
- возвращает конкретный объект модели Tournament;POST /tournament/
- создать объект модели Tournament.
Но важно, чтобы они имели одинаковый URL /tournament/
!
Я пробовал что-то вроде этого:
models.py
class Tournament(Model):
...
viewsets.py
class PublicTournamentEndpoint(
mixins.RetrieveModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet
):
queryset = Tournament.objects.all()
authentication_classes = [] # empty!
class PrivateTournamentEndpoint(
mixins.CreateModelMixin,
viewsets.GenericViewSet
):
queryset = Tournament.objects.all()
authentication_classes = ['SomeAuthBackend'] # not empty!
routers.py
class TournamentRouter(SimpleRouter):
routes = [
Route(
url=r'^{prefix}/tournament/$',
mapping={
'get': 'retrieve',
'post': 'create',
},
name='{basename}',
detail=True,
initkwargs={},
),
urls.py
tournament_router = TournamentRouter()
tournament_router.register(
'tournaments',
PublicTournamentEndpoint,
basename='tournaments',
)
tournament_router.register(
'tournaments',
PrivateTournamentEndpoint,
basename='tournaments',
)
urlpatterns += tournament_router.urls
Но мойurlpatterns
имеет следующие значения:
[
<URLPattern '^tournaments/tournament/$' [name='tournaments']>,
<URLPattern '^tournaments/tournament/$' [name='tournaments']>
]
и поэтому, когда я отправляю запрос POST /tournament/
, я получаю следующую ошибку:
405 "Method \"POST\" not allowed."
, поскольку первый URL-адрес совпадения не имеетметод POST, но только GET. Как я могу решить эту проблему?
Спасибо!