Запрос со значением поля «многие ко многим» таблицы - PullRequest
0 голосов
/ 08 января 2019

У меня есть эта модель

class Tag(models.Model):
      tag = models.CharField(max_length=100,unique=True)



class Image(models.Model):
      image_name=models.CharField(max_length=40,unique=False)
      image=models.ImageField(upload_to='photos/')
      tags = models.ManyToManyField(Tag)

Вид такой:

class ImagePostAPIView(mixins.CreateModelMixin,generics.ListAPIView):
     queryset = Image.objects.all()
     query = Tag.objects.all()
     serializer_class = imagesSerializer

     def get_queryset(self):
        tag_value = self.request.query_params.get('tags', None)

        if tag_value is not None:
          try:
             queryset=Image.objects.filter(tags=tag_value)
          except:
             pass
        return queryset

Я могу фильтровать данные, используя tag_id, но я хочу фильтровать, используя значение тега. Мой URL выглядит так:

GET /images/?tags=banner

Как этого добиться в Джанго?

1 Ответ

0 голосов
/ 08 января 2019

Простое и быстрое решение - изменить параметр url на tags__tag вместо tags as,

GET /images/?<b>tags__tag</b>=banner

Если вы хотите больше контроля над параметрами фильтрации, используйте пакет django-filter. В этом разделе filterset_class, показывающий аналогичный пример, связанный с вашим вопросом

...