python - 查询表的多对多字段值

标签 python django django-models django-rest-framework django-views

我有这个型号

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)

View 是这样的:

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 过滤数据,但我想使用标签值过滤。 我的网址如下所示:

GET /images/?tags=banner

如何在 Django 中实现这一点?

最佳答案

简单快速的解决方案是将 url 参数更改为 tags__tag 而不是 tags

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

如果您想更好地控制过滤参数,请使用django-filter包。本节,filterset_class显示与您的问题相关的类似示例

关于python - 查询表的多对多字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54087408/

相关文章:

python - 如何使用python从文件中读取数字仅列出为整数

python - 如何在不覆盖 `self` 的情况下模拟基于类的 View 的特定方法?

python - 检查一个项目是否包含在 ManyToManyField (django)

Django - 无法在模型保存()中打开图像

python - Django 覆盖 bulk_create

python - 当我一次取消堆叠多个级别时,如何填充 na 值

python - 使用 matplotlib 在一张图上绘制四个箱线图

python - `anaconda` 是否为每个新环境创建一个单独的 PYTHONPATH 变量?

python - 为什么我在 Django 中的测试函数在 chrome 浏览器中正确显示页面时返回状态代码 404?

python - Django 和 Folium 集成