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

Django中使用values()获取Chapter模型数据时如何返回书籍标题而非ID

解决Django中返回关联模型标题而非ID的问题

要在返回的JSON中显示书籍标题而非关联ID,只需在values()方法中指定外键关联的字段,通过双下划线__访问关联模型的属性即可。

修改后的views.py代码

方式1:直接返回关联字段(键名为book_id__title)

from django.http import JsonResponse
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views import View
from .models import Chapter

class BookChapters(LoginRequiredMixin, View):
    def get(self, request):
        # 指定需要的字段,包括关联Books模型的title
        chapters = Chapter.objects.values('id', 'source', 'chapter', 'date', 'book_id__title')
        return JsonResponse(list(chapters), safe=False)

方式2:重命名字段为更友好的book_title

如果希望返回的键名更简洁,导入F表达式来重命名字段:

from django.http import JsonResponse
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views import View
from django.db.models import F
from .models import Chapter

class BookChapters(LoginRequiredMixin, View):
    def get(self, request):
        chapters = Chapter.objects.values(
            'id',
            'source',
            'chapter',
            'date',
            # 重命名关联字段为book_title
            book_title=F('book_id__title')
        )
        return JsonResponse(list(chapters), safe=False)

效果示例

方式2返回的JSON结构如下:

[
{
"id": 1,
"source": "nobel",
"chapter": "18",
"date": "2022-06-26T17:50:26Z",
"book_title": "你的书籍标题"
},
{
"id": 2,
"source": "noble",
"chapter": "19",
"date": "2022-06-26T17:50:28Z",
"book_title": "你的书籍标题"
}]

原理说明

Django的values()方法支持外键字段名__关联模型字段名的格式,直接获取关联模型的属性值,无需额外遍历查询结果手动替换。使用F表达式可以为返回的字段指定自定义键名,让JSON结构更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:45:39