psycopg2.errors.错误的数组文字.细节:意外的数组元素



我是python新手django。我试着创建一个选择题测试网站。我是越南人,所以我的问题都是用越南语。

我得到了一个问题,当我试图插入一个对象答案到数据库。

我的错误:

django.db.utils.DataError: malformed array literal: "{"A": "Cu01a1m", "B": "chu00e1o"}"
LINE 1: ...answer", "level") VALUES ('Hôm nay ăn gì', '', 1, '{"A": "C...
^
DETAIL:  Unexpected array element.

POST要求:

{
"title": "Hôm năy ăn gì",
"category": 3,
"choices": {
"A": "Cơm",
"B": "cháo"
},
"answer": "A"
}

以下是我在models.py中的代码:

from django.db import models
from django.contrib.postgres.fields import ArrayField
# Create your models here.
class Category(models.Model):
title = models.TextField(null=False, blank=False)
description = models.TextField(null=False, blank=False)

class Question(models.Model):
title = models.TextField(null=False, blank=False)
description = models.TextField(null=False, blank=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
# choices = ArrayField(ArrayField(models.TextField(blank=True)))
choices = models.JSONField(null=False, blank=False)
answer = models.TextField(null=False,blank=False)
level = models.IntegerField(null=True, blank=True)

Inviews.py:

from django.db.models import query
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from rest_framework import generics
from rest_framework import viewsets
from app.models import User, Category, Question
from app.serializers import UserSerializer, QuestionSerializer,  CategorySerializer
from django.shortcuts import get_object_or_404
# Create your views here.
class CategoryViewSet(viewsets.ModelViewSet):
serializer_class = CategorySerializer
queryset = Category.objects.all()
class QuestionViewSet(viewsets.ModelViewSet):
serializer_class = QuestionSerializer
queryset = Question.objects.all()

Inserializers.py:

from django.contrib.postgres import fields
from rest_framework import serializers
from app.models import User, Question, Category
class CategorySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Category
fields = ['id', 'title', 'description']
class QuestionSerializer(serializers.ModelSerializer):
# category = CategorySerializer(read_only=False)
class Meta:
model = Question
fields = ['id', 'description', 'category', 'choices', 'answer', 'level']

任何解决方案,我插入一个越南JSON对象到数据库。或者我可以使用ArrayField而不是JSONField?如果是,你能给我举个例子吗?

非常感谢。

看起来像Question模型choices字段没有从数据库中的array更改为json字段。所以你看到的是:

select '{"A": "Cu01a1m", "B": "chu00e1o"}'::varchar[];
ERROR:  malformed array literal: "{"A": "Cu01a1m", "B": "chu00e1o"}"
LINE 1: select '{"A": "Cu01a1m", "B": "chu00e1o"}'::varchar[];

代替:

select '{"A": "Cu01a1m", "B": "chu00e1o"}'::jsonb;
jsonb           
---------------------------
{"A": "Cơm", "B": "cháo"}

psql中查看问题表并查看字段实际是什么?

try this

from django.contrib.postgres.fields import JSONField

class Question(models.Model):

choices = JSONField()

最新更新