You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:36:22