首页 > 解决方案 > 如何从订单表中获取所有数据,但从 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',)

标签: djangodjango-rest-framework

解决方案


有几种方法可以过滤 DRF 中的相关字段,但几乎所有方法都涉及覆盖相应的序列化器字段。你可以尝试的是:

  • 解决方案 1:创建一个delivered_items返回过滤结果的客户订单属性(例如 ),并使用OrderItemSerializer(source="delivered_items", many=True)
  • 解决方案2:重写 ListOrderSerializerto_representation方法以排除某些结果。我认为状态通常会在请求 GET 中作为request.query_params["status"]. 您可以将其传递给序列化程序上下文(覆盖get_serializer_context)并self.contextto_representation.

推荐阅读