首页 > 解决方案 > Django methodSerializer 不返回绝对图像 url

问题描述

序列化程序.py

class PostImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = PostImage
        fields = ('id', 'post', 'post_img')

class PostSerializer(serializers.ModelSerializer):
    postimg_set = serializers.SerializerMethodField('get_postimg_set')
    editor = UserSerializer()
    class Meta:
        model = Post
        fields = ('id', 'title', 'content', 'editor', 'postimg_set', 'created_at')

    def get_postimg_set(self, obj):
        a = PostImage.objects.filter(post = obj.id)
        print(a[0].post_img)
        return PostImageSerializer(a, many=True).data

模型.py

from django.db import models
import os, uuid, datetime
from apps.account.models import *
from django.utils import timezone

def img_upload(instance, filename):
    ext = filename.split('.')[-1]
    now = datetime.datetime.now()
    path = "media/static/post/{}".format(instance.post.id)
    format = uuid.uuid4().hex + "_" + filename
    return os.path.join(path, format)

class Post(models.Model):
    title = models.CharField('제목', null=False, blank=False, max_length=40)
    content = models.TextField('내용', null=False, blank=False)
    editor = models.ForeignKey(User, default = 1, null=False, blank=False, verbose_name="작성자", on_delete=models.CASCADE)
    created_at = models.DateTimeField(default=timezone.localtime())
    
    class Meta:
        verbose_name = '게시글'
        verbose_name_plural = '게시글'
        
    def __str__(self):
        return self.title

class PostImage(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    post_img = models.ImageField(upload_to=img_upload)

    class Meta:
        verbose_name = "게시글 이미지"
        verbose_name_plural = "게시글 이미지"

    def __str__(self):
        return str(self.post.title) + "이미지"

这是结果。

猜 postimg_set = serializers.SerializerMethodField('get_postimg_set') 不返回图像的绝对 URL。当我使用 UserSerializer() 时,它返回用户个人资料图像的绝对图像 url。

寻求帮助。谢谢

标签: django

解决方案


在您的urls.py中,添加:

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
-- closed--

推荐阅读