Привет, у меня есть viewset, который я создаю. Я хочу переопределить функцию get functino и получить все записи с фильтрованным параметром, который передается в представление get. Я также хочу иметь возможность выполнять остальную часть грубой функциональности - GET POST PUT DELETE - и использовать параметр, передаваемый через url, в качестве параметра для POST и UPDATE.
Прямо сейчас, когда я передаю параметр, а не фильтрую возвращаемые данные, он не дает мне никаких подробностей, что мне не нужно. Я хочу, чтобы он использовался в качестве вторичного фильтра для всех записей, которые я получаю из базы данных.
Вот код:
viewset
class PreferenceUserViewSet(viewsets.ModelViewSet):
queryset = Preference.objects.all().filter(user_id=1)
serializer_class = PreferenceSerializer
class PreferenceNamespaceViewSet(viewsets.ModelViewSet):
queryset = Preference.objects.all().filter(user_id=1)
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 list(self, request, namespace=None):
# switch user_id value with logged in users id
queryset = Preference.objects.all().filter(user_id=1, namespace=namespace)
serializer = PreferenceSerializer(queryset, many=True)
return Response(serializer.data)
URL:
path('preferences/<str:namespace>/', PreferenceNamespaceViewSet.as_view({
'get':'list'
})),
path('users/<int:pk>/stacks/', person_stack, name='user-stacks'),
Я хочу использовать namepsace
в качестве вторичного фильтра для всех данных, возвращаемых в GET. Я также хочу использовать его как часть данных, которые я могу ввести при создании нового предпочтения.
** Я также хочу сделать то же самое с третьим потенциальным параметром, например ... **
потенциальные третьи параметры:
urlpatterns = [
path('preferences/<str:namespace>/<str:path>', PreferencePathViewSet.as_view({
'get':'list'
})),
path('preferences/<str:namespace>/', PreferenceNamespaceViewSet.as_view({
'get':'list'
})),
path('users/<int:pk>/stacks/', person_stack, name='user-stacks'),
]