为什么响应将列表项视为Django中的字符串?

时间:2019-04-03 20:25:03

标签: python django django-models django-rest-framework django-views

我正在研究一种情况,当用户发送带有数据的发布请求时,数据将存储在表中并响应该表中的所有对象。

我正在尝试在JsonResponse中实现django-rest-framework

我创建了两个模型字段,分别为ListFields,并序列化了查询集以进行响应。

但是,当服务器发送响应而不是列表项时,它们将显示为字符串值。

这是我的代码

models.py:

from django.db import models
from djongo.models import ListField

class Post(models.Model):
    title = models.TextField()
    cast = ListField()
    scenes = ListField()

views.py:

from rest_framework.response import Response
from rest_framework.views import APIView
from app1.models import Post
from app1.serializers import PostSerializer

class CreateView(APIView):
    def post(self, request):
        data = request.POST
        post = Post(**data)
        post.save()
        dat = Post.objects.all()
        print(dat)
        serializer = PostSerializer(dat, many=True)
        return Response(serializer.data)

serializers.py:

from rest_framework import serializers
from app1.models import Post

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'

输出:

[
    {
        "id": 1,
        "title": "['This is title']",
        "cast": "['1,2,3']",
        "scenes": "['4,5,6']"
    },
    {
        "id": 2,
        "title": "['This is title']",
        "cast": "['10,20,30']",
        "scenes": "['40,50,60']"
    },
    {
        "id": 3,
        "title": "['This is title']",
        "cast": "['10,20,30']",
        "scenes": "['40,50,60']"
    }
]

此处的演员和场景字段显示为字符串而不是列表。

顺便说一句。我正在使用MongoDB,并且列表字段未保存为数组。它们被保存为字符串,其中各项之间用逗号分隔。

我要去哪里错了?我应该怎么做才能使字段作为列表字段而不是字符串表现出来?

2 个答案:

答案 0 :(得分:1)

您不是以DRF方式进行操作:(正如 Daniel Roseman 所述,您应该使用序列化程序来保存它们。无论如何,请尝试以下代码段

class CreateView(APIView):
    def post(self, request):
        post_serializer = PostSerializer(data=request.data)
        post_serializer.is_valid(True)
        post_serializer.save()
        return Response(post_serializer.data)

答案 1 :(得分:0)

问题在于您考虑请求并保存请求的方式。正如JPG所建议的,如果将响应序列化后将其另存为对象,那将不是问题。