在Django Admin中上传多个图像 [英] Upload multiple images in Django Admin

查看:404
本文介绍了在Django Admin中上传多个图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

models.py

class Video(models.Model):
    title = models.CharField(max_length=100, blank=True, default='')
    details = models.TextField()

class VideoDetails(models.Model):
    video = models.ForeignKey(Video, on_delete=models.CASCADE, related_name='videos')
    images = models.ImageField(upload_to='images/video/%Y/%m/%d')

serializers.py

class VideoDetailsSerializer(serializers.ModelSerializer):
    class Meta:
        model = VideoDetails
        fields = '__all__'

class VideoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Video
        fields = '__all__'

admin.py

class VideoDetailsInline(admin.TabularInline):
    model = VideoDetails

class VideoAdmin(admin.ModelAdmin):
    inlines = [VideoDetailsInline]

admin.site.register(Video, VideoAdmin)


如上所述,我上传了3张图像用于视频2。但是,在我的 VideoList 视图中,我没有得到这些图像的URL。

As shown above, I uploaded 3 images for video 2. However, in my VideoList view, I didn't get the urls of those images.

views.py

class VideoList(viewsets.ModelViewSet):
    serializer_class = VideoSerializer
    queryset = Video.objects.all()

如何我可以将 VideoDetail 中的图像网址附加到 Video queryset 中c>?需要您的帮助...

How can I attach those image url in VideoDetail to the queryset of Video? Need your help...

推荐答案

根据该更改文件,不要忘记配置 MEDIA_URL

Change your files according to that and don't forget configure a MEDIA_URL

models.py

import os
from django.conf import settings

class VideoDetails(models.Model):
    video = models.ForeignKey(Video, on_delete=models.CASCADE, related_name='videos')
    images = models.ImageField(upload_to='images/video/%Y/%m/%d')

    def get_absolute_image_url(self):
        return os.path.join(settings.MEDIA_URL, self.images.url)

serializers.py

class VideoDetailsSerializer(serializers.ModelSerializer):

    image_url = serializers.URLField(source='get_absolute_image_url', read_only=True)

    class Meta:
        model = VideoDetails
        fields = ('video', 'image_url')


class VideoSerializer(serializers.ModelSerializer):

    video_details = VideoDetailsSerializer(many=True, read_only=True)

    class Meta:
        model = Video
        fields = ('title', 'details', 'video_details')

这篇关于在Django Admin中上传多个图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆