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

Django REST:序列化关联Summary的对象列表链接(Django2.0+Python3.6)

解决方法:生成Summary实例下Object列表的链接

嘿,Django 2.0搭配Python 3.6完全没问题,这个环境对实现你要的功能没有任何影响,放心往下走就好!结合你给出的模型和URL配置,我分步骤给你说怎么实现:

1. 完善URL配置

你之前的URL配置没写完,我们需要添加一个带summary_pk参数的URL,用来指定具体是哪个Summary下的Object列表:

from django.urls import path
from . import views

object_list = views.ObjectListViewSet.as_view({'get': 'list'})

urlpatterns = [
    # 其他已有的URL...
    path('summary/<int:summary_pk>/objects/', object_list, name='summary-object-list'),
]

这里用Django 2.0开始推荐的path代替旧的url,summary_pk会作为参数传递给视图,方便后续过滤数据。

2. 在视图中过滤指定Summary的Object

接下来修改你的ObjectListViewSet,重写get_queryset方法,根据URL传入的summary_pk过滤出对应的Object:

from rest_framework import viewsets
from .models import Object
from .serializers import ObjectSerializer  # 替换成你自己的序列化器

class ObjectListViewSet(viewsets.ReadOnlyModelViewSet):
    serializer_class = ObjectSerializer

    def get_queryset(self):
        # 从URL参数中获取Summary的主键
        summary_pk = self.kwargs.get('summary_pk')
        # 返回该Summary下的所有Object
        return Object.objects.filter(summary__pk=summary_pk)

3. 给Summary模型添加生成链接的方法

为了方便在模板或序列化器中调用,我们可以在Summary模型里加一个方法,直接生成对应的Object列表链接:

from django.db import models
from django.urls import reverse

class Summary(models.Model):
    type = models.CharField(max_length=100)  # 补全你的字段参数

    def get_objects_url(self):
        # 使用reverse根据URL名称生成链接
        return reverse('summary-object-list', kwargs={'summary_pk': self.pk})

class Object(models.Model):
    summary = models.ForeignKey(Summary, on_delete=models.CASCADE)
    # 你的其他字段...

4. 在模板或API中使用链接

模板中使用

如果是在Django模板里展示Summary信息,直接调用这个方法就行:

<!-- 假设模板上下文里有summary实例 -->
<p>查看<a href="{{ summary.get_objects_url }}">该汇总下的所有对象</a></p>

API序列化器中使用

如果是在REST API里返回这个链接,可以在Summary的序列化器中添加一个字段:

from rest_framework import serializers
from .models import Summary
from django.urls import reverse

class SummarySerializer(serializers.ModelSerializer):
    objects_url = serializers.SerializerMethodField()

    class Meta:
        model = Summary
        fields = ['id', 'type', 'objects_url']

    def get_objects_url(self, obj):
        # 生成绝对URL(需要传入request上下文)
        request = self.context.get('request')
        return request.build_absolute_uri(reverse('summary-object-list', kwargs={'summary_pk': obj.pk}))

这样不管是前端页面还是API接口,都能轻松获取到指向对应Object列表的链接啦!

内容的提问来源于stack exchange,提问作者johndough

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:50:29