У меня есть 2 набора просмотра по одному и тому же URL, один для создания и списка, другой для получения обновления и уничтожения. Код Viewset выглядит следующим образом:
class UserViewSet(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
viewsets.GenericViewSet):
"""
retrieves user accounts
"""
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = (AllowAny,)
class UserCreateViewSet(mixins.CreateModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
"""
Creates user accounts
"""
queryset = User.objects.all()
serializer_class = CreateUserSerializer
permission_classes = (AllowAny,)
def list(self, request, *args, **kwargs):
email = self.request.query_params.get('email', None)
phone_no = self.request.query_params.get('phone_no', None)
if email is not None:
queryset = User.objects.filter(email=email)
elif phone_no is not None:
queryset = User.objects.filter(phone_no=phone_no)
else:
queryset = User.objects.all()
return super(UserCreateViewSet, self).list(request, *args, **kwargs)
Это моя конфигурация URL:
router = DefaultRouter()
router.register(r'users', UserCreateViewSet)
router.register(r'users', UserViewSet)
router.register(r'advertisement', AdvertisementCreateViewSet)
router.register(r'advertisement', AdvertisementViewSet)
urlpatterns = [
path('admin/', admin.site.urls),
path('api-token-auth/', CustomAuthToken.as_view()),
path('api-token-auth/verify-otp', VerifyTokenView.as_view()),
path('api-token-auth/verify-email', VerifyEmailView.as_view()),
path('api/v1/admin/login', LoginAdminUser.as_view()),
path('api/v1/user/reset-password/', ResetPasswordView.as_view()),
url('api/v1/user/(?P<id>.+)/changePassword', ChangePasswordView.as_view())
path('api/v1/', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
re_path(r'^$', RedirectView.as_view(url=reverse_lazy('api-root'), permanent=False)),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Рекламный ViewSet делает то же самое на другой модели, и работает без всяких проблем. Но в UserViewSet это не так ... Я попытался сравнить код обоих наборов, и они абсолютно одинаковы ...