2016-05-16 18 views
1

我想設計一個API來創建與畫廊(多圖片上傳)一起租信息。我的模型看起來這列出目前不支持HTML中輸入REST框架

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) 

如何爲每個租金啓用多個圖片上傳?我得到的是

enter image description here

回答

2

目前尚不清楚是否你問的是可瀏覽API渲染器中的文件上傳表單,或者如果你問純粹是內Django的管道,以保存和顯示圖像。我正在回答有關管道的問題,即上傳和保存。

教程上傳使用REST API文件,也許閱讀過先取得較好的背景:他們https://medium.com/@jxstanford/django-rest-framework-file-upload-e4bc8de669c0#.i5pun7abs

注意如何設置解析器在FileUploadViewSet。此FileUpload模型就像您的圖庫模型。你應該能夠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')) 

閱讀本關於如何/何時選擇解析器的詳細信息,以及一些片段:http://www.django-rest-framework.org/api-guide/parsers/