Я пытался использовать django-filters, но объекты не фильтруются. Кроме того, разрешение не работает для представлений partial_update.
У меня есть Viewset, который имеет основные действия, такие как - list (), retrieve (), destroy (), partial_update () и несколько других действий, и пытается применить фильтр для того же.
После некоторого исследования я обнаружил, что, поскольку я создаю набор запросов с помощью фильтров, мне придется переопределить метод get_queryset (). Однако это тоже, похоже, не работает. Фильтр работает только с ModelViewSet или ListApiView?
ViewSet -
class PostViewSet(viewsets.ViewSet):
"""
The Endpoint to list, retrieve, create and delete Posts.
"""
filter_backends = (DjangoFilterBackend, )
# filterset_class = PostFilter
filter_fields = ('pet_age', 'pet_gender', 'breed')
def get_permissions(self):
if self.action == 'partial_update' or self.action == 'update':
permission_classes = [IsPostAuthor, ]
elif self.action == 'create' or self.action == 'destroy':
permission_classes = [IsAuthenticated, ]
else:
permission_classes = [AllowAny, ]
return[permission() for permission in permission_classes]
def get_queryset(self):
return Post.objects.active() # This is implemented via custom Manager
def list(self, request, *args, **kwargs):
"""
Method for Post listing. It can be accessed by anyone.
"""
serializer = PostListSerializer(self.get_queryset(), many=True, context={"request": request})
return Response(serializer.data)
# REST CODE TRUNCATED
Разрешение -
class IsPostAuthor(permissions.BasePermission):
"""
Object-level permission to only allow owners of an object to edit it.
"""
def has_object_permission(self, request, view, obj):
if request.user.is_authenticated:
if view.action in ['partial_update', 'update']:
return obj.user.id == request.user.id
return False
return False
PostFilter -
class PostFilter(filters.FilterSet):
class Meta:
model = Post
fields = ('pet_age', 'pet_gender', 'breed', )
Менеджер -
class PostManager(models.Manager):
def active(self):
return self.filter(post_status='Active')
Любая помощь будет принята с благодарностью.
IsPostAuthor
в представление - person JPG   schedule 17.09.2018