首页 > 解决方案 > CharField 类型的对象不是 JSON 可序列化的

问题描述

我正在通过尝试构建想到的东西来学习 Django。现在我正在尝试构建 Django rest API,它从 postgres 数据表中返回项目或所有项目。

模型.py

class AdModel(models.Model):
    id = models.IntegerField
    name = models.CharField(max_length=50),
    address = models.CharField(max_length=50),
    web = models.CharField(max_length=50),

    class Meta:
        db_table = 'mock_location_data'

序列化程序.py

class AdSerializer(serializers.ModelSerializer):
class Meta:
    model = AdModel
    fields = ['id', 'name', 'address', 'web']

视图.py

class AdAPIView(APIView):

    def get(self, request):
        queryset = AdModel.objects.all()
        serializer_class = AdSerializer(queryset, many=True)
        return Response(serializer_class.data)

在 GET 请求中,我收到内部服务器错误 500,其中“CharField 类型的对象不是 JSON 可序列化的”

在 views.py 中,如果将 fields = ['id', 'name', 'address', 'web'] 替换为

fields = '__all__'

我正在获取所有 id 字段

[  {    "id": 1  },  {    "id": 2  },  {    "id": 3  },.....]

但没有其他数据

我正在使用 Django 3.1.5 和 DRF 3.12.2

标签: pythondjangodjango-rest-framework

解决方案


您在 AdModel 类的 id 字段中遗漏了一对括号,并且在每个字段之后也不需要“,”:

class AdModel(models.Model):
    id = models.IntegerField()
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=50)
    web = models.CharField(max_length=50)

推荐阅读