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

