django - 如何从订单表中获取所有数据,但从 django 中的订单项目表中获取一些数据
问题描述
我有两个表订单和订单项目,一个订单有许多具有多种状态的订单项目,例如“新”、“已取消”、“已交付”。
因此,当我获取所有包含仅状态=“新”的订单项目的订单时,它会返回所有具有“新”以外状态的订单项目,例如“已取消”、“已交付”。
所以基本上,它返回具有特定订单 ID 的所有订单项目,它不会返回针对该订单 ID 的部分订单项目。
这是我的代码:
视图.py
order = Order.objects.distinct().filter(orderitem__status=request.data['status'])
serializer = ListOrderSerializer(order, many=True)
return Response(serializer.data)
序列化程序.py
class ListOrderSerializer(serializers.ModelSerializer):
order_items = ListOrderItemSerializer(many=True, read_only=True)
class Meta:
model = Order
exclude = ('id',)
解决方案
有几种方法可以过滤 DRF 中的相关字段,但几乎所有方法都涉及覆盖相应的序列化器字段。你可以尝试的是:
- 解决方案 1:创建一个
delivered_items
返回过滤结果的客户订单属性(例如 ),并使用OrderItemSerializer(source="delivered_items", many=True)
- 解决方案2:重写 ListOrderSerializer
to_representation
方法以排除某些结果。我认为状态通常会在请求 GET 中作为request.query_params["status"]
. 您可以将其传递给序列化程序上下文(覆盖get_serializer_context
)并self.context
在to_representation
.
推荐阅读
- azure-cognitive-services - 无法使用 Azure 表单识别器从身份证中提取信息作为键值对
- python - scipy 和 numpy 逆 fft 返回复数而不是浮点数,不能保存为 wav
- hibernate - 为什么从 saveAndFlush() 返回的实体的 OneToMany 字段映射为 null?
- c# - 发送消息 CTRL + 向上箭头
- python - 如何在 Python 3 中读取 Thorlabs 应变计读取器 KSG101
- python-3.x - MNIST 数据集异常检测
- ruby-on-rails - Ruby where 子句一起查找特定条件和 nil 值
- java - CrudRepository 保存方法不保存任何数据库
- php - 如何处理将数组或单个值传递给函数
- reactjs - 如何更新数组的状态