【问题标题】:Lists are not currently supported in HTML input in rest frameworkREST 框架中的 HTML 输入当前不支持列表
【发布时间】:2016-09-11 18:35:52
【问题描述】:

我想设计一个用于创建租金信息和画廊的api(多张图片上传)。我的模型看起来像这样

class Rental(models.Model):
    ownerName = models.CharField(_("Owner's Name"),max_length=255, blank=True,null=True,
        help_text=_("Owner's Full Name"))
    renter = models.ForeignKey(User,null=True,blank=True)
    email = models.CharField(max_length=120,blank=True,null=True)
    phoneNumber = models.PositiveIntegerField(blank=False,null=True,
        help_text=_("Phone number of contact person"))

class Gallery(models.Model):
    rental = models.ForeignKey('Rental', null=True, on_delete=models.CASCADE,verbose_name=_('Rental'), related_name="gallery")
    image = models.ImageField(blank=True,upload_to='upload/',null=True)

serializers.py

class GalleryListSerializer(ModelSerializer):
    class Meta:
        model = Gallery

class RentalCreateUpdateSerializer(ModelSerializer):
    gallery = GalleryListSerializer(many=True)
    class Meta:
        model = Rental
        exclude = ('id','slug','is_published','created_on','modified_on',)

views.py

class RentalCreateAPIView(CreateAPIView):
    queryset = Rental.objects.all()
    serializer_class = RentalCreateUpdateSerializer
    # permission_classes = [IsAuthenticated]

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

    def create(self,validated_data):
        ownerName=validated_data.get('ownerName',None)
        renter = validated_data.get('renter', None)
        email=validated_data.get('email',None)
        phoneNumber=validated_data.get('phoneNumber',None)
        image=validated_data.pop('image')
        return Rental.objects.create(ownerName=ownerName,renter=renter,phoneNumber=phoneNumber,email=email,image=image)

如何为每个租金启用多张图片上传?我得到的是

【问题讨论】:

    标签: python django api django-rest-framework django-1.9


    【解决方案1】:

    不清楚您是在询问 Browsable API Renderer 中的文件上传 FORM,还是纯粹询问 Django 中保存和显示图像的管道。我正在回答有关管道的问题,即上传和保存。

    使用 REST API 上传文件的教程,不妨先阅读一下以获得更好的背景知识:https://medium.com/@jxstanford/django-rest-framework-file-upload-e4bc8de669c0#.i5pun7abs

    注意他们如何在 FileUploadViewSet 中设置解析器。这个 FileUpload 模型就像您的 Gallery 模型。您应该能够像这样将 parser_classes 添加到您的 CreateAPIView 中:

    # views.py
    from rest_framework.parsers import FormParser, MultiPartParser
    from rest_framework.viewsets import ModelViewSet
    from probably.obtain.models import FileUpload
    from probably.obtain.serializers import FileUploadSerializer
    
    
    class FileUploadViewSet(ModelViewSet):
    
        queryset = FileUpload.objects.all()
        serializer_class = FileUploadSerializer
        parser_classes = (MultiPartParser, FormParser,)
    
        def perform_create(self, serializer):
            serializer.save(owner=self.request.user,
                           datafile=self.request.data.get('datafile'))
    

    阅读本文以获取有关如何/何时选择解析器的更多详细信息,以及更多 sn-ps:http://www.django-rest-framework.org/api-guide/parsers/

    【讨论】:

    • 我想他是在问如何通过 UI 上传多张图片。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2021-11-15
    • 2012-05-07
    • 2021-03-27
    • 1970-01-01
    相关资源
    最近更新 更多