django - DRF SerializerMethodField 没有被调用
问题描述
这是我的序列化器:
class MetaDataSerializer(serializers.Serializer):
bg_colors = ColorSerializer(Color.objects.all(), many=True)
button_choices = serializers.SerializerMethodField()
class Meta:
fields = ('bg_colors', 'button_choices')
def get_button_choices(self, obj):
return {
'save': 1, 'continue': 2, 'cancel': 3, 'back': 4
}
我从我的视图中调用这个序列化程序,如下所示:
class MetaDataView(RetrieveAPIView):
serializer_class = MetaDataSerializer
def get(self, request, *args, **kwargs):
return Response(self.get_serializer().data)
在回复中,我只得到了bg_colors
字段。响应中没有另一个字段,并且它的 get_field 方法也没有被调用。
我在这里做错了什么?
解决方案
不要Colors
在序列化程序定义中传递查询集,而是从您的视图集中传递它。
进行以下更改:
- 在序列化程序中:-
class MetaDataSerializer(serializers.Serializer):
bg_colors = ColorSerializer(many=True)
button_choices = serializers.SerializerMethodField()
class Meta:
fields = ('bg_colors', 'button_choices')
def get_button_choices(self, obj):
return {
'save': 1, 'continue': 2, 'cancel': 3, 'back': 4
}
- 鉴于:-
class MetaDataView(RetrieveAPIView):
serializer_class = MetaDataSerializer
def get(self, request, *args, **kwargs):
final_data = {"bg_colors": Colors.objects.all()}
return Response(self.get_serializer(final_data).data)
推荐阅读
- javascript - 如何将数据从 app.component 传递给 ionic 中的子组件或其他组件
- javascript - 如何复制特定的 imdb ID 并将其添加到另一个状态?
- c++ - 下面的代码是否可能存在内存泄漏?
- python-3.x - TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是“列表”(Python3.6)
- javascript - Math.pow 在 calc 中返回 0
- android - 如何在 ionic 2 中实现 In App Purcharse?
- javascript - For循环和2个数组
- spring - Spring:如何从数据库中显示百里香中的图像
- php - 调用未定义的方法 Illuminate\Database\Query\Builder::appends() 错误
- javascript - 无法 console.log 获取结果