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

Django创建REST API视图时如何访问关联表中外键以外的字段

问题解答

完全可以在同一个Django视图中访问多张表,你的需求通过Django ORM的外键关联特性即可实现,不需要单独查询两张表,具体操作如下:

步骤1:优化查询集(推荐,避免N+1查询性能问题)

通过select_related提前联表加载关联的Artist数据,仅需一次SQL查询即可拿到所有需要的字段,修改视图代码如下:

class FilterVases(generics.ListAPIView):
    serializer_class = VaseSerializer 
    def get_queryset(self):
        # select_related 提前关联查询Artist表,减少数据库查询次数
        queryset = Vase.objects.select_related('artist').all()
        artist_id = self.request.query_params.get('artist_id')
        if artist_id is not None:
            queryset = queryset.filter(artist_id=artist_id)
        vaseID = self.request.query_params.get('vaseID')
        if vaseID is not None:
            queryset = queryset.filter(vaseID=vaseID)
        return queryset 

步骤2:修改VaseSerializer序列化器,返回artistName字段

两种常用实现方案,按需选择:

方案1:直接返回单独的artistName字段(适配你当前需求)

在VaseSerializer中新增artistName字段,通过source参数指定从关联的Artist对象取值:

from rest_framework import serializers
from .models import Vase

class VaseSerializer(serializers.ModelSerializer):
    artistName = serializers.CharField(source='artist.artistName', read_only=True)
    class Meta:
        model = Vase
        # fields数组里添加artistName,不需要返回artist_id的话可以直接删除对应字段
        fields = ['vaseID', 'vaseRef', 'inscription', 'fabric', 'subject', 'technique', 'height', 'diameter', 'artistName']
方案2:嵌套Artist序列化器(适合需要返回多个Artist字段的场景)

如果后续需要同时返回Artist的多个字段(比如artistID+artistName),可以先定义Artist序列化器再嵌套使用:

from rest_framework import serializers
from .models import Vase, Artist

class ArtistSerializer(serializers.ModelSerializer):
    class Meta:
        model = Artist
        fields = ['artistID', 'artistName']

class VaseSerializer(serializers.ModelSerializer):
    artist = ArtistSerializer(read_only=True)
    class Meta:
        model = Vase
        fields = ['vaseID', 'vaseRef', 'inscription', 'fabric', 'subject', 'technique', 'height', 'diameter', 'artist']

该方案返回的接口数据中,artist会以对象格式返回,包含你需要的所有Artist表字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:00:03