gpt4 book ai didi

json - 如何在DRF中序列化一个对象的多个图像(如url中)?

转载 作者:行者123 更新时间:2023-12-02 03:10:22 25 4
gpt4 key购买 nike

我有一个通过ForeignKey与Item模型相关的图像模型,但该资源的API端点仅显示图像的名称而不是图像的url。 (我在 Item 模型中有一个图像文件,可以显示为 url/uri)。那么,如何序列化数据以获得图像的所有媒体 URL。

型号:

class Item(models.Model):

title = models.CharField(max_length=200)
...
img = models.ImageField()

class ItemDetailImg(models.Model):
item = models.ForeignKey(
Item, on_delete=models.CASCADE, related_name='images')
image = models.ImageField()

序列化器:

class ItemSerializer(serializers.ModelSerializer):

class Meta:
model = Item
fields = ("id",
"title",
...
"images"
)

一个 API 响应:

{
"id": 16,
"title": "Venice",

...

"img": "http://127.0.0.1:8000/media/roman-kraft-g_gwdpsCVAY-unsplash.jpg",

"images": [
7,
8
]
}

我期待这种 api 响应

{
"id": 16,
"title": "Venice",

...

"img": "http://127.0.0.1:8000/media/roman-kraft-g_gwdpsCVAY-unsplash.jpg",

"images": [
"http://127.0.0.1:8000/media/image1.jpg",
"http://127.0.0.1:8000/media/image2.jpg"
]
}

谢谢,如有任何帮助,我们将不胜感激!

最佳答案

您实际上想要相关字段看看 docs ,但目前还不清楚如何计算图像的 url,因此我将在下面提出一个解决方案

class ItemDetailImg(models.Model):
item = models.ForeignKey(
Item, on_delete=models.CASCADE, related_name='images')
image = models.ImageField()

@property
def image_url(self):
return "{0}{1}".format(settings.MEDIA_URL, self.image.url)

现在在序列化器中添加一个与 slug 相关的字段,如下所示

class ItemSerializer(serializers.ModelSerializer):
imges = serializers.SlugRelatedField(many=True, read_only=True, slug_field="image_url")
class Meta:
model = Item
fields = ("id",
"title",
...
"images"
)

关于json - 如何在DRF中序列化一个对象的多个图像(如url中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57763646/

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