Django Rest Framework imageField 到服务器

Posted

技术标签:

【中文标题】Django Rest Framework imageField 到服务器【英文标题】:Django Rest Framework imageField to server 【发布时间】:2015-08-26 06:09:20 【问题描述】:

目前我正在尝试使用 imageField 将图像从我的模型传递到端点,但我不知道如何去做。

这是我的模型:

class searchResultsItem(models.Model):
    """
    Model to store search results item for a tableView cell
    """
    title = models.CharField(max_length = 100)
    price = models.CharField(max_length = 4)
    pop = models.IntegerField(default = 0)
    distance = models.CharField(max_length = 10)
    image = models.ImageField(upload_to="/media",default="/media")

这是我的看法:

class searchResultsItemViewSet(viewsets.ModelViewSet):
    """
    API or Endpoint that can be viewed or edited
    """
    queryset = searchResultsItem.objects.all()
    serializer_class = searchResultsItemsSerializer

这是我的序列化器:

class searchResultsItemsSerializer(serializers.ModelSerializer):
    """
    Serializer to parse searchResultsCell data
    """
    image = serializers.ImageField(
            max_length = None, use_url=True
        )

    class Meta:
        model = searchResultsItem
        fields = ('title','price','pop','distance','image')

这是我的网址:

from panView.searchTableData import views

router = routers.DefaultRouter()
router.register(r'searchResultsItem',views.searchResultsItemViewSet)

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]

但是,当我查看我的端点时,我收到了图片 url 的 404 错误。这些图像位于我的应用程序文件夹和我的项目文件夹上方的媒体目录中。文本对象仅适用于图像。

如果有人知道如何使用 imageField 将图像从 Django rest 框架传递到端点,我希望得到指导。

【问题讨论】:

【参考方案1】:

serializer.ImageField

这会返回图片的绝对url,我们需要的是相对url。 您可以为此进行以下操作-

class searchResultsItemsSerializer(serializers.ModelSerializer):
    """
    Serializer to parse searchResultsCell data
    """
    image = serializers.SerializerMethodField()

    def get_image(self, instance):
        # returning image url if there is an image else blank string
        return instance.image.url if instance.image else ''

    class Meta:
        model = searchResultsItem
        fields = ('title','price','pop','distance','image')

SerializerMethodField 的文档

希望这会有所帮助。

【讨论】:

谢谢!这确实给了我一个相对网址,但仍然不是正确的网址。我对 Django 比较陌生。我觉得好像我的目录结构设置不正确

以上是关于Django Rest Framework imageField 到服务器的主要内容,如果未能解决你的问题,请参考以下文章

怎么安装django rest framework

django rest framework中文介绍

17-Django-Django REST framework-REST framework及RESTful简介

为啥 django-rest-framework 不显示 OneToOneField 数据 - django

Django:rest framework之分页(Pagination)

django使用rest_framework