gpt4 book ai didi

ManyRelatedField 的 Django REST Framework 序列化

转载 作者:行者123 更新时间:2023-12-01 10:51:00 25 4
gpt4 key购买 nike

我正在尝试使用 Django Rest 框架序列化我的模型 - http://django-rest-framework.org/

我想要的是序列化一个模型,其中包含 ManyToMany 关系:

class ImageResource(models.Model):
# Some code here
image = models.ImageField(upload_to=upload_images_to)
keywords = models.ManyToManyField('cards.Keyword', related_name='image_keywords', blank=True);
# More code here

所以这是我的模型(我删除了一些字段以帮助您专注于关键字字段)

我的序列化器看起来像这样:
class ImageResourceSerializer(serializers.HyperlinkedModelSerializer):
keywords = serializers.ManyRelatedField(source='keywords')

class Meta:
model = ImageResource
fields = ('id', 'url', 'image', 'keywords')

我将展示的最后一件事是 API 的结果
{
"id": 2,
"url": "http://127.0.0.1:3004/apiimageresource/2/",
"image": "images/1386508612-97_img-02.JPG",

"keywords": [
"birthday",
"cake"
]
},

如您所见,关键字作为字符串(它们的名称)的数组返回。我的愿望是将它们作为带有它们的 id 和 value 的键值对返回:
"keywords": [
"1":"birthday",
"3":"cake"
]

如果您知道如何使用我的序列化器执行此操作,我将不胜感激:)

最佳答案

创建自定义序列化程序:

class MyKeywordsField(serializers.RelatedField):
def to_native(self, value):
return { str(value.pk): value.name }

用它:
class ImageResourceSerializer(serializers.HyperlinkedModelSerializer):
keywords = MyKeywordsField(many=True)
# ...

关于ManyRelatedField 的 Django REST Framework 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20470864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com