Charfilter json в Django rest framework

У меня есть фильтр в django rest charfilterinfilter(field_name= 'genres__name', lookup_expr= 'in'). У меня есть в базе данных какие две категории подойти я через Many To Many сделал, Но у меня при фильтрации две категории этого продукта есть два элемента мне нужен только один элемент

Просмотры

class CharFilterInFilter(filters.BaseInFilter, filters.CharFilter):
    pass

class ShoppFilter(filters.FilterSet):
    price = filters.RangeFilter()
    genres = CharFilterInFilter(field_name='genres__name')
    title = SearchFilter()
    class Meta:
        model = smartphone
        fields = ['price','genres','title']


class MDShopListView(generics.ListAPIView):
    queryset = smartphone.objects.all()
    filter_backends = (DjangoFilterBackend,SearchFilter)
    search_fields = ['title']
    filterset_class = ShoppFilter



def get(self, request):
    queryset = self.filter_queryset(self.get_queryset())
    serializer=MDShopListSerializer(queryset,many=True)
    return Response(serializer.data)

Модели

genres = models.ManyToManyField(Genre, verbose_name = "жанры")


class Genre(models.Model):
   [enter image description here][1]
    name = models.CharField("Имя", max_length=100)

Изображение json 1: https://i.stack.imgur.com/4WR6L.png

i.stack.imgur.com/4WR6L.png
Prizrak Mir 18.12.2020 21:23
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
1
209
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это обычная проблема с полями ManyToMany, решением будет применение метода distinct к запросу:

class ShoppFilter(filters.FilterSet):
    ...your filter definition as it is now

    def filter_queryset(self, request, queryset, view):
        return super(ShoppFilter, self).filter_queryset(
            request, queryset, view
        ).distinct()

Здесь меняем и работаем queryset = self.filter_queryset(self.get_queryset()).distinct()

Prizrak Mir 18.12.2020 23:28
Ответ принят как подходящий

Тут меняйся и работай набор запросов = self.filter_queryset(self.get_queryset()).отличный()

class CharFilterInFilter(filters.BaseInFilter, filters.CharFilter):
        pass

class ShoppFilter(filters.FilterSet):
    price = filters.RangeFilter()
    genres = CharFilterInFilter(field_name='genres__name', lookup_expr='in')
    title = SearchFilter()
    

    class Meta:
        model = smartphone
        fields = ['price','genres','title']


class MDShopListView(generics.ListAPIView):
    queryset = smartphone.objects.all()
    filter_backends = (DjangoFilterBackend,SearchFilter)
    search_fields = ['title']
    filterset_class = ShoppFilter

    
    
    def get(self, request):
        queryset = self.filter_queryset(self.get_queryset()).distinct()
        serializer=MDShopListSerializer(queryset,many=True)
        return Response(serializer.data)

Другие вопросы по теме

Похожие вопросы