我已经设置了 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
您将需要使用 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