python - 上传多张图片并关联到属性

标签 python django django-rest-framework

我正在为 rest api 使用 django rest 框架。我正在尝试处理多张图片上传并将这些多张图片关联到属性。但是,我的可浏览 api 不显示上传图像的表单,因此我可以测试我的代码是否有效。如何上传多张图片并将它们关联到属性?

class Property(models.Model):
  owner = models.ForeignKey(settings.AUTH_USER_MODEL)
  address = models.CharField(_('Address'), max_length=140)
  rooms = models.PositiveSmallIntegerField(_('Rooms'))

class Gallery(models.Model):
    property = models.ForeignKey(Property, related_name="gallery")
    caption = models.CharField(null=True, blank=True, max_length=80)
    image = models.ImageField(upload_to="properties/rooms/")

class GallerySerializer(serializers.ModelSerializer):
    class Meta:
        model = Gallery
        fields=('id', 'caption', 'image', )

class PropertySerializer(serializers.ModelSerializer, EagerLoadingMixin):
    _SELECT_RELATED_FIELDS = ['owner', ]
    _PREFETCH_RELATED_FIELDS = ['property_type',]
    gallery = GallerySerializer(many=True)


class PropertyGallery(APIView):
    serializer_class = GallerySerializer
    parser_classes = (FileUploadParser,)
    def put(self, request, property_id=None, format=None):
        serializer = self.serializer_class(data=request.data, partial=True)
        if not serializer.is_valid():
            return Response(serializer.errors, status= status.HTTP_400_BAD_REQUEST)
        else:
            serializer.save()
            return Response(serializer.data, status=status.HTTP_200_OK)

url(r'^upload/images/(?P<property_id>[0-9]*)/$', views.PropertyGallery.as_view(), name='property-gallery'),

enter image description here

最佳答案

如果删除该行,

parser_classes = (FileUploadParser,)

将显示序列化器字段。

由于您已经编写了更新现有对象的 View ,因此如果不存在具有特定 ID 的对象,您可能需要引发异常。为此,您可以使用快捷函数 get_object_or_404()

from django.shortcuts import get_object_or_404

def put(self, request, property_id=None, format=None):
    _property = get_object_or_404(Property, id=property_id)
    serializer = self.serializer_class(data=request.data, partial=True)
    if not serializer.is_valid():
        return Response(serializer.errors, status= status.HTTP_400_BAD_REQUEST)
    else:
        serializer.save(property=_property)
        return Response(serializer.data, status=status.HTTP_200_OK)

关于python - 上传多张图片并关联到属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44859266/

相关文章:

python - 在 Django 模板中迭代 JSON 数据

python - 具有绝对 URL 路径的 Django 压缩器和 clevercss

python - flask mysql 不为空

django - "Post Image data using POSTMAN"

python字符串将多个数组表示为numpy数组

Python Django 检查属性是否存在或已设置

sql - 在不必要时防止 Django 模型调用中的慢速 INNER JOIN

django - Python/Django BooleanField 模型,RadioSelect 表单默认为空

python - 使用 Django OAuth2 工具包生成单一访问 token

python - 当 Django 不为 Web 服务器的根提供服务时,如何引用 Django Rest Framework 路由器 URL