Django Rest Framework imageField на сервер

В настоящее время я пытаюсь использовать 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')

Вот мои URL:

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-адреса изображения. Изображения расположены в каталоге мультимедиа над папкой моего приложения и в папке моего проекта. Текстовые объекты работают, а не изображения.

Если кто-нибудь знает, как передавать изображения из среды отдыха Django в конечную точку с помощью imageField, мне бы хотелось получить руководство для этого.


person Sasikanth Kavuri    schedule 26.08.2015    source источник


Ответы (1)


сериализатор.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

Надеюсь это поможет.

person Saurabh Goyal    schedule 26.08.2015
comment
Спасибо! Это дает мне относительный URL-адрес, но все же неправильный URL-адрес. Я относительно новичок в джанго. Я чувствую, что моя структура каталогов настроена неправильно - person Sasikanth Kavuri; 26.08.2015