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
相关产品推荐
相关产品推荐

