【问题标题】:Upload multiple images in Django Admin在 Django Admin 中上传多个图像
【发布时间】:2018-12-11 00:17:10
【问题描述】:

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)

如上所示,我为视频 2 上传了 3 张图片。但是,在我的 VideoList 视图中,我没有获得这些图片的网址。

views.py

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

如何将VideoDetail 中的这些图片网址附加到Videoqueryset?需要你的帮助...

【问题讨论】:

    标签: python django django-rest-framework django-admin


    【解决方案1】:

    据此更改您的文件,不要忘记配置一个 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')
    

    【讨论】:

    • 在序列化程序 VideoSerializer 上尝试获取字段 video_details 的值时出现 AttributeError。序列化程序字段可能命名不正确,并且与 Video 实例上的任何属性或键都不匹配。原始异常文本为:“视频”对象没有“视频详细信息”属性。有什么问题吗?
    • @mrhaoji 根据video_details = VideoDetailsSerializer(many=True, read_only=True)改行VideoSerializer
    猜你喜欢
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 2014-04-29
    • 2022-01-25
    • 2012-09-11
    • 2012-05-28
    相关资源
    最近更新 更多