【问题标题】:Object of type CharField is not JSON serializableCharField 类型的对象不是 JSON 可序列化的
【发布时间】:2021-07-28 18:55:16
【问题描述】:

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

models.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']

views.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

【问题讨论】:

  • 这里发生了一些事情,但最突出的是你的模型字段末尾有逗号,这会将它们变成元组,因此不是有效的模型字段
  • 天哪,我怎么看不到这个。除了这个菜鸟的错误,我做错了什么吗?
  • 唯一明显的是:不要定义 id 字段,让 Django 自动为您创建一个,而您模型中的那个甚至没有被初始化/调用,所以我没有真的不知道它是如何工作的

标签: python django django-rest-framework


【解决方案1】:

您在 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2021-07-04
    • 2021-12-10
    • 1970-01-01
    • 2021-09-27
    • 2019-09-04
    • 2019-01-12
    相关资源
    最近更新 更多