如何使用 Django 和 Django Rest Framework 序列化简单的字符串列表

问题描述 投票:0回答:1

我已经设置了 Django 和 Django Rest Framework,并且正在尝试设置我的模型以获取字符串列表。

这是我的代码

模型.py

import uuid
from django.db import models

class TagModel(models.Model):
    name = models.CharField(max_length=100)

class EventModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    title = models.CharField(max_length=255)
    tags = models.ManyToManyField(TagModel)

    class Meta:
        db_table = "events"
        ordering = ['-createdAt']

        def __str__(self) -> str:
            return self.title

序列化器.py

from rest_framework import serializers
from .models import EventModel, TagModel


class TagSerializer(serializers.ModelSerializer):
    class Meta:
        model = TagModel
        fields = '__all__'


class EventSerializer(serializers.ModelSerializer):
    tags = TagSerializer(many=True)

    class Meta:
        model = EventModel
        fields = '__all__'

我的代码可以工作,但不是我所期望的。我尝试让邮递员执行 GET 和 POST 请求。 GET 请求似乎运行良好,但 POST 请求可以运行,但只能使用如下所示的字典

{
            "title": "My example title",
            "tags": [{"name":"string"}, {"name":"pokemon"}]
}

但我想发送一些像这样简单的东西

{
            "title": "My example title",
            "tags": ["string", "pokemon"]
}

如何实现这一点?

注意:我不使用POSTGRESQL

python django rest django-rest-framework django-serializer
1个回答
0
投票

您将需要使用 SlugRelatedField 。它需要参数

queryset
many
slug_field

class EventSerializer(serializers.ModelSerializer):
    tags = serializers.SlugRelatedField(
        queryset=TagModel.objects.all(),
        many=True,
        slug_field='name'
     )

    class Meta:
        model = EventModel
        fields = '__all__'

参考:https://www.django-rest-framework.org/api-guide/relations/#sluglatedfield

© www.soinside.com 2019 - 2024. All rights reserved.