首页 > 解决方案 > psycopg2.errors.InvalidTextRepresentation:格式错误的数组文字...详细信息:意外的数组元素

问题描述

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

当我尝试将对象 Answers 插入数据库时​​遇到问题。

我的错误:

django.db.utils.DataError: malformed array literal: "{"A": "C\u01a1m", "B": "ch\u00e1o"}"
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)

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

serializers.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 吗?如果是的话,你能给我举个例子吗?

非常感谢。

标签: pythonjsondjangopostgresqldjango-rest-framework

解决方案


尝试这个

from django.contrib.postgres.fields import JSONField


class Question(models.Model):
    
    choices = JSONField()

推荐阅读