Kes*_*iya 6 django django-rest-framework
这是我的序列化器:
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
}
Run Code Online (Sandbox Code Playgroud)
我从我的角度调用这个序列化器,如下所示:
class MetaDataView(RetrieveAPIView):
serializer_class = MetaDataSerializer
def get(self, request, *args, **kwargs):
return Response(self.get_serializer().data)
Run Code Online (Sandbox Code Playgroud)
在响应中我只得到了bg_colors字段。响应中缺少另一个字段,并且它的 get_field 方法也没有被调用。
我在这里做错了什么?
小智 1
不要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
}
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)