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

如何在Django模型序列化器中从关联表获取多列数据

如何通过Django序列化器从关联的Question表获取多列数据?

嘿,我来帮你搞定这个问题~首先先提个小细节:你的questions模型里q_active = models.IntegerField这里少了括号,应该写成models.IntegerField(),不然运行时会触发报错,记得先修正这个小问题哦。

接下来针对你的需求,有两种常用的实现方式,我给你分别说明:

方法一:使用嵌套序列化器(推荐)

这是最简洁直观的方式,先定义一个Question模型的序列化器,然后在Choice的序列化器里嵌套它,就能一次性获取关联Question的多列数据。

代码示例:

from rest_framework import serializers
from .models import questions, choice

# 先定义Question的序列化器,指定你需要获取的字段
class QuestionSerializer(serializers.ModelSerializer):
    class Meta:
        model = questions
        fields = ('q_name', 'q_active', 'q_createdby', 'q_created')  # 这里列你需要的多列数据

# 定义Choice的序列化器,嵌套上面的QuestionSerializer
class choiceserializer(serializers.ModelSerializer):
    # 利用模型里的related_name关联,直接嵌套Question序列化器
    c_question = QuestionSerializer()

    class Meta:
        model = choice
        fields = ('c_name', 'c_question')  # 包含Choice自身字段和关联的Question完整数据

方法二:用SerializerMethodField自定义字段

如果只需要Question里的某几个特定字段,或者需要对字段做自定义处理,可以用这个方法逐个指定要获取的字段,灵活性更高。

代码示例:

from rest_framework import serializers
from .models import choice

class choiceserializer(serializers.ModelSerializer):
    # 自定义字段,获取Question的名称
    question_name = serializers.SerializerMethodField()
    # 自定义字段,获取Question的状态
    question_active = serializers.SerializerMethodField()
    # 可以继续添加更多需要的字段

    def get_question_name(self, obj):
        return obj.c_question.q_name

    def get_question_active(self, obj):
        return obj.c_question.q_active

    class Meta:
        model = choice
        fields = ('c_name', 'question_name', 'question_active')  # 包含自定义字段

两种方法都能实现你的需求,嵌套序列化器适合需要获取Question多个字段的场景,自定义字段则适合精细化控制的场景,你可以根据自己的需求选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:13:20