4 votes

Les filtres et la recherche du cadre de repos de Django ne fonctionnent pas lorsque def list() est ajouté aux ensembles de vues du modèle

Je travaille sur une API écrite dans le cadre de repos Django. J'ai ajouté des filtres de recherche et des filtres de classement dans mon ModelViewSet et ils fonctionnent bien.

class bookviewset(ModelViewSet):

    queryset = Book.objects.all()
    serializer_class = book_serializer
    filter_class = bookfilter
    filter_backends = ( django_filters.rest_framework.DjangoFilterBackend,filters.OrderingFilter,filters.SearchFilter)
    ordering_fields = ('created_at', 'id','price_ids__price',)
    search_fields = ('name', 'description', 'tag_ids__tag_name', 'category_ids__category')

Mais, quand je passe outre def list(self, request, *args, **kwargs): dans Modelviewset, tous les filtres ont cessé de fonctionner.

Y a-t-il un moyen de réactiver tous les filtres ?

Merci.

3voto

Dima Kudosh Points 3393

Vous devez filtrer manuellement votre queryset à l'aide de la méthode suivante filter_queryset méthode. Ajoutez donc cette ligne à votre méthode de liste.

def list(self, request, *args, **kwargs):
    # fetch qs
    qs = self.filter_queryset(qs)
    # etc

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X