目前,我试图使用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')),
]

然而,当我查看我的端点时,我会得到一个404错误的图像url。这些图像位于“我的应用程序”文件夹上方的媒体目录和“我的项目”文件夹中。文本对象只起作用而不是图像。
如果有人知道如何使用imageField将图像从Django rest框架传递到端点,我希望得到指导。

最佳答案

序列化程序.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的文档
希望这有帮助。

10-06 06:15