Почему ответ рассматривает элемент списка как строку в Django rest? - PullRequest
0 голосов
/ 03 апреля 2019

Я работаю над случаем, когда, когда пользователь отправляет почтовый запрос с данными, данные будут храниться в таблице и отвечать на все объекты в этой таблице.

Я пытаюсь реализовать 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 ]

1 голос
/ 04 апреля 2019

Вы не делаете это по-DRF :( Как сказал Даниэль Роузман , вы должны использовать сериализатор для их сохранения. В любом случае, попробуйте следующий фрагмент

class CreateView(APIView):
    def post(self, request):
        <b>post_serializer = PostSerializer(data=request.data)
        post_serializer.is_valid(True)
        post_serializer.save()</b>
        return Response(<b>post_serializer.data</b>)
0 голосов
/ 04 апреля 2019

Проблема в том, как вы рассматриваете запрос и сохраняете его.Как предлагает JPG, не будет проблем, если вы сохраните ответ как объект после сериализации.

...