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

Django序列化器传递Choices选项失效,求解决方案

解决Django序列化器传递模型Choices选项的问题

你的写法无法工作是因为source参数的用法错误:它是用来指定从模型实例或上下文获取数据的路径字符串,不能直接传入字典值。下面是两种可行的解决办法:

方法一:使用SerializerMethodField

这种方式灵活可控,适合需要额外处理Choices数据的场景:

from rest_framework import serializers
from .models import Distributor

class DistributorSerializer(serializers.ModelSerializer):
    modes = serializers.SerializerMethodField()

    def get_modes(self, obj):
        # 返回Choices对应的字典,键是选项值,值是显示文本
        return dict(Distributor.ModeChoices.choices)

    class Meta:
        model = Distributor
        fields = ['modes', ...] # 补充其他需要序列化的字段

方法二:直接给DictField设置default

如果只是需要固定返回Choices字典,不需要关联模型实例数据,这种方式更简洁:

from rest_framework import serializers
from .models import Distributor

class DistributorSerializer(serializers.ModelSerializer):
    modes = serializers.DictField(default=dict(Distributor.ModeChoices.choices))

    class Meta:
        model = Distributor
        fields = ['modes', ...]

可选:调整返回格式适配前端

如果前端需要[{value: 1, label: 'physical'}, ...]这种结构化列表,可以修改返回逻辑:

def get_modes(self, obj):
    return [
        {'value': key, 'label': value}
        for key, value in Distributor.ModeChoices.choices
    ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:40:34