首页 > 解决方案 > 将序列化程序方法字段添加到 generics.ListAPIView - Django

问题描述

我有一个模型,它的名字是 Permit。我的操作系统 windows 7 django 3.2 序列化程序类:

class PermitListSerializer(serializers.ModelSerializer):
    def __init__(self,page=None, *args, **kwargs):
        self.page = page
        super().__init__(*args, **kwargs)
    page_number = serializers.SerializerMethodField()
    userfullname = serializers.SerializerMethodField()
    show_subsystem = serializers.SerializerMethodField()
  
    def get_show_subsystem(self,obj):
        return obj.subsystem.name
    def get_userfullname(self, obj):
        return obj.issuer.get_full_name() if obj.issuer.get_full_name() else 'Unknown'
    def get_page_number(self, obj):
        return self.page
    class Meta:
        model = Permit
        fields = '__all__'

我的观点:

class c_receive_tm(generics.ListAPIView):
    serializer_class = PermitListSerializer 
    filter_backends=(filters.SearchFilter,)
    search_fields=('name', 'description')

    def get_queryset(self):
        return Permit.objects.all().order_by('-id')

我得到一个错误:

TypeError at /api/receive_tm/
Object of type Permit is not JSON serializable
Request Method: GET
Request URL:    http://127.0.0.1:8000/api/receive_tm/
Django Version: 3.2.6
Exception Type: TypeError
Exception Value:    
Object of type Permit is not JSON serializable

如果我删除所有 SerializerMethodField 它的作品我需要这个附加字段

标签: pythondjangoapidjango-rest-frameworkdjango-serializer

解决方案


推荐阅读