如何用Django ORM筛选关联指定作者Offer的Order数据?
解决方案:通过Django ORM获取关联指定作者Offer的Order数据
1. ORM查询实现
要获取所有关联了指定作者ID的Offer的Order,可利用Django ORM的双下划线跨表查询,结合distinct()避免重复结果(因为一个Order可能关联多个同作者的Offer):
from .models import Order # pk为请求的作者ID,比如示例中的3 orders = Order.objects.filter(offers__author_id=pk).distinct()
2. DRF视图编写
基于Django REST Framework实现视图,处理GET请求并返回序列化后的Order数据:
from rest_framework.views import APIView from rest_framework.response import Response from .models import Order from .serializers import OrderSerializer class OrdersByOfferAuthorView(APIView): def get(self, request, pk): # 查询符合条件的Order并去重 orders = Order.objects.filter(offers__author_id=pk).distinct() # 序列化数据 serializer = OrderSerializer(orders, many=True) return Response(serializer.data)
3. URL配置
在项目的urls.py中添加对应路由,匹配GET /orders/3/这类请求:
from django.urls import path from .views import OrdersByOfferAuthorView urlpatterns = [ path('orders/<int:pk>/', OrdersByOfferAuthorView.as_view(), name='orders-by-offer-author'), ]
4. 可选:返回Order时仅包含指定作者的Offer
如果需要在返回的Order数据中,只展示该作者的Offer(而非所有关联的Offer),可修改OrderSerializer:
from rest_framework import serializers from .models import Order, Offer from .serializers import OfferSerializer class OrderSerializer(serializers.ModelSerializer): # 自定义字段,仅返回指定作者的Offer author_offers = serializers.SerializerMethodField() class Meta: model = Order fields = ['id', 'name', 'posted_by', 'author_offers'] def get_author_offers(self, obj): # 从请求路由中获取作者ID author_id = self.context['request'].parser_context['kwargs']['pk'] # 过滤当前Order中属于该作者的Offer target_offers = obj.offers.filter(author_id=author_id) return OfferSerializer(target_offers, many=True).data
内容的提问来源于stack exchange,提问作者ILYASEM
相关产品推荐
相关产品推荐

