Django Rest框架-过滤多对多字段

2023-11-23

假设我有一个这样的模型:

class Car(models.Model):
    images = models.ManyToManyField(Image)

class Image(models.Model):
    path = models.CharField()
    type = models.CharField()

我想公开两个 API 视图:

  • 汽车清单
  • 汽车详细信息

在列表视图中,我只想显示 type="thumbnail" 的图像。在详细信息视图中,我想显示 type="image" 的图像。

列表或多或少应该是这样的:

[{
    "id": 1,
    "images": [1, 2],
},
{
    "id": 2,
    "images": [3, 4],
}]

以及详细信息视图:

{
    "id": 1,
    "images": [5],
}

请注意,根据视图显示不同的图像 ID。

到目前为止,我的序列化器如下所示:

class CarSerializer(serializers.ModelSerializer):
    images = serializers.ManyPrimaryKeyRelatedField()

    class Meta:
        model = Car

列表api视图:

class CarList(generics.ListAPIView):
    model = Car
    serializer_class = CarSerializer

详情api查看:

class CarDetails(generics.RetrieveAPIView):
    model = Car
    serializer_class = CarSerializer

当然,这为我提供了列表中的所有图像以及详细信息,并强制客户端进行额外的调用以获取应显示的图像类型。

有没有通用的方法来做到这一点?我看过 django-filter 示例,但似乎只能过滤列出的对象,而不是列出列出的对象中的相关对象。


我不知道您是否仍在寻找这个答案,但也许它对其他人有帮助。

首先创建一个过滤器类,如下所示:

class CarFilter(django_filters.FilterSet):
    having_image = django_filters.Filter(name="images", lookup_type='in')

    class Meta:
        model = Car

然后将过滤器添加到您的视图中:

class CarList(generics.ListAPIView):
    model = Car
    serializer_class = CarSerializer
    filter_class = CarFilter

就这样。将“?having_image=1”添加到您的查询字符串中,Django 过滤器应该可以为您解决问题。

希望能帮助到你..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django Rest框架-过滤多对多字段 的相关文章

随机推荐

  • 如何使用 gcc 获取带有行号信息的 C++ 堆栈跟踪? [复制]

    这个问题在这里已经有答案了 我们使用专有的堆栈跟踪assert就像捕获开发人员错误的宏一样 当捕获错误时 会打印堆栈跟踪 我找到了 gcc 的对backtrace backtrace symbols 方法不足 名字被破坏了 无线路信息 第一
  • 如何在Linux中更改echo的输出颜色

    我正在尝试使用 echo 命令在终端中打印文本 我想以红色打印文本 我怎样才能做到这一点 你可以使用这些ANSI 转义码 Black 0 30 Dark Gray 1 30 Red 0 31 Light Red 1 31 Green 0 3
  • 显示错误:尝试在空对象引用上调用接口方法“int java.util.List.size()”

    我正在创建一个在列表视图中显示联系人列表的应用程序 问题是当我运行我的应用程序时出现以下错误 并且我正在努力修复它 04 05 13 41 48 868 2488 2488 E AndroidRuntime FATAL EXCEPTION
  • 使用Python和pyserial访问USB串口

    如何使用 pyserial 访问 USB 端口 我见过一个example with import serial ser serial Serial dev ttyUSB0 我曾经使用适当的语法从 Windows 上的 MATLAB 访问串行
  • C 中的 snprintf 与 strcpy (等)

    为了进行字符串连接 我一直在做基本的strcpy strncpychar 缓冲区 然后我了解到snprintf和朋友 我应该坚持我的strcpy strcpy 0终止 或者我应该使用snprintf将来 正如其他人已经指出的那样 不要使用
  • Android Realm - 使用 Intent 传递 Realm 对象

    我想将领域对象从一个活动传递到另一个活动 例如 Intent intent new Intent MainActivity this Second class intent putExtra Student studentObj stude
  • 为什么我的 LWP::UserAgent 凭据不起作用?

    我正在尝试访问受保护的文件 服务器正在使用摘要身份验证 我可以从打印输出的响应中看到这一点 这是示例代码 use LWP use strict my url http somesite com aa bb cc html my userna
  • 如何在 mongoDB 中进行字母数字排序?

    我有一个这样的收藏 userID TR31 userID TR1059 userID TR1043 我想按升序或降序对该文档进行排序 我尝试了这种方式db col find sort userID 1 and db col find sor
  • UITableViewCell 抛出异常

    我正在将一个项目更新到 iOS 8 并且我的 UITableViewCell 实现之一遇到了这个问题 当前在模拟器上而不是设备上 并且它设置为 iPhone 6 Assertion failure in UITableViewCell se
  • 根据值拆分数组

    自从我不得不处理一些 javascript 代码以来已经很长时间了 我已经很生疏了 我需要像这样分割一个数组 Object 0 gt 2013 04 12 1 gt text 2 gt text 3 gt text 4 gt text 5
  • 如何解决“本地主机意外关闭连接”错误?

    我正在努力通过 Mean Machine JavaScript 堆栈初学者实用指南 作者 Chris Sevilleja 我的问题在第 60 页 根据本书的说明 我创建了一个小问题server js文件 以及package json 并使用
  • 远程跟踪分支和远程分支有什么区别?

    看来我可以从远程存储库上的分支中提取或推送到我正在处理的分支 如果是这样 那么远程跟踪分支的目的是什么 仅仅是为了检查分支并看看它是什么样子吗 看起来远程跟踪分支就像远程分支的镜子 仅供参考 我对 git 相当陌生 但是已经阅读并重新阅读了
  • TMemo 最大宽度

    有没有办法让TMemo将超过1024的文本显示为1行 看看这个简单的代码 procedure TForm1 Button2Click Sender TObject var s string i integer begin s for i 0
  • 了解非阻塞线程同步和Thread.MemoryBarrier

    在这本线程在线书中 http www albahari com threading part4 aspx 有一个例子Thread MemoryBarrier class Foo int answer bool complete void A
  • 欠定系统的非负最小二乘

    考虑以下问题 Find x 1 x 2 x 3 gt 0这样 67 5 60 x 1 90 x 2 120 x 3 60 30 x 1 120 x 2 90 x 3 有没有办法在Python中解这个方程 也许与scipy nnls 使用 s
  • 同时按总和聚合一列并按平均值聚合另一列

    我想在日期框架上使用聚合函数 但对一列求和并取另一列的平均值 这是一个示例数据框 Manager Category Amount SqFt Joe Rent 150 500 Alice Rent 250 700 Joe Utilities
  • 更改通用 Windows 平台中的按钮样式

    我尝试制作一个简单的 C UWP 应用程序 但我不知道当鼠标悬停在按钮上时如何删除灰色背景 我怎么做到这一点 请记住 它是适用于 Windows 10 平台的 UWP 而不是 Windows Phone 8 1 或 WPF 按着这些次序 在
  • Qt 检测计算机何时进入睡眠状态?

    如何检测用户计算机何时进入睡眠状态 笔记本电脑盖子关闭 由于不活动而进入睡眠模式等 我需要这样做来断开用户的 TCP 连接 基本上我们有一个简单的聊天应用程序 我们想让用户离线 Qt 无法检测计算机何时进入睡眠或休眠状态 但有一些依赖于平台
  • 对于数组,为什么会出现 a[5] == 5[a] 的情况?

    正如乔尔在书中指出的那样堆栈溢出播客 34 in C语言 又名 K R C 中提到了数组的这个属性 a 5 5 a Joel 说这是因为指针运算 但我还是不明白 为什么a 5 5 a C 标准定义了 运算符如下 a b a b 所以a 5
  • Django Rest框架-过滤多对多字段

    假设我有一个这样的模型 class Car models Model images models ManyToManyField Image class Image models Model path models CharField ty