У меня есть приложение django rest framework.Я хочу передать два параметра через URL, и если они передаются, я хочу использовать каждый из параметров в качестве фильтра в наборе запросов.Так в основном.если не передан параметр, то захватить все данные для пользователя.если пространство имен передается, я хочу фильтровать по пользователю и пространству имен.если путь введен, я хочу фильтровать по пользователю, пространству имен и пути.Теперь он этого не делает.
У меня настроено 3 разных URL, которые идут к 3 различным наборам, потому что, когда я пытаюсь сделать его одним URL, он выдает ошибку и не работает вообще.
Я также хочу, чтобы пространство имен и путь были дополнительно включены в URL, чтобы URL работал без пространства имен и назначенного ему пути.Когда я пробовал один URL, это потребовало бы обоих параметров для работы ....
URL:
router.register(r'preferences', PreferenceUserViewSet, basename='Preference')
router.register(r'preferences/(?P<namespace>.+)', PreferenceNamespaceViewSet, basename='Preference-namespace')
router.register(r'preferences/(?P<namespace>.+)/(?P<path>.+)', PreferencePathViewSet, basename='Preference-path')
viewset:
class PreferenceUserViewSet(viewsets.ModelViewSet):
model = Preference
serializer_class = PreferenceSerializer
def get_permissions(self):
if self.action == 'create' or self.action == 'destroy':
permission_classes = [IsAuthenticated]
else:
permission_classes = [IsAdminUser]
return [permission() for permission in permission_classes]
@permission_classes((IsAuthenticated))
def get_queryset(self):
queryset = Preference.objects.filter(user_id=1)
return queryset
class PreferenceNamespaceViewSet(viewsets.ModelViewSet):
model = Preference
serializer_class = PreferenceSerializer
lookup_namepsace = 'namespace'
def get_permissions(self):
if self.action == 'create' or self.action == 'destroy':
permission_classes = [IsAuthenticated]
else:
permission_classes = [IsAdminUser]
return [permission() for permission in permission_classes]
@permission_classes((IsAuthenticated))
def get_queryset(self):
namespace = self.request.query_params.get('namespace')
queryset = Preference.objects.filter(user_id=1, namespace=namespace)
return queryset
class PreferencePathViewSet(viewsets.ModelViewSet):
model = Preference
serializer_class = PreferenceSerializer
lookup_namepsace = 'namespace'
lookup_path = 'path'
def get_permissions(self):
if self.action == 'create' or self.action == 'destroy':
permission_classes = [IsAuthenticated]
else:
permission_classes = [IsAdminUser]
return [permission() for permission in permission_classes]
@permission_classes((IsAuthenticated))
def get_queryset(self):
namespace = self.request.query_params.get('namespace')
path = self.request.query_params.get('path')
queryset = Preference.objects.filter(user_id=1, namespace=namespace, path=path)
return queryset
Я пытаюсь понятьпростое решение этого процесса.
Что должно произойти, если пространство имен и путь не будут переданы взамен всех настроек.если пространство имен включено, фильтруйте предпочтения по пространству имен и то же самое с путем.