2016-01-26 11 views
5

मुझे कई छवि अपलोड के लिए Django Rest Framework के साथ मुश्किल समय हो रहा है। मुझे जो चाहिए वह एक किराये की मेज है जहां उपयोगकर्ता एक साथ कई छवियों के साथ किराये की जानकारी भर देगा (छवियां रसोईघर, रहने का कमरा, बाथरूम इत्यादि की तरह) उस किराए के लिए वे पंजीकरण करना चाहते हैं। एक किराए में कई छवियां हो सकती हैं, इसलिए मेरे पास कई सारे संबंधों के साथ छवि क्षेत्र है। मैं सर्वर या एपीआई में एकाधिक छवियां भेजने में सक्षम नहीं था। सर्वर पर संग्रहीत करने के लिए उपयोग की जाने वाली केवल एक छवि लेकिन मेरे डेटाबेस डिज़ाइन को बदलने और कईToManyField विकल्प पर जाने के बाद भी एक ही छवि संग्रहित नहीं की जाएगी।कई छवि अपलोड के लिए django आराम ढांचे

settings.py

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
MEDIA_URL = '/media/' 
MEDIA_ROOT = os.path.join(BASE_DIR,'media') 

Models.py

class Gallery(models.Model): 
     image = models.FileField(null=True,blank=True,upload_to='upload/') 
     class Meta: 
      verbose_name = _('Gallery') 
      verbose_name_plural = _('Galleries') 

class Rental(models.Model): 
     listingName = models.CharField(_("Lisitng Name"), max_length=255, blank=False, null=True, 
      help_text=_("Title of the rental space")) 
     property = models.CharField(_("Property type"),max_length=10,null=True) 
     room = models.PositiveIntegerField(_("No of Rooms"), blank=False, null=True, 
      help_text=_("Number of bedrooms available")) 
     price = models.PositiveIntegerField(blank=False,null=True) 
     city = models.CharField(_("City"), max_length=255, blank=False, null=True) 
     image = models.ManyToManyField(Gallery) 

Serializers.py

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


class RentalSerializer(serializers.ModelSerializer): 
    image = GallerySerializer(many=True) 
    class Meta: 
     model = Rental 
     fields = ('pk','listingName','property','city','room','price','image') 

    def create(self,validated_data): 
     listingName=validated_data.get('listingName',None) 
     property=validated_data.get('property',None) 
     city=validated_data.get('city',None) 
     room=validated_data.get('room',None) 
     price=validated_data.get('price',None) 
     image=validated_data.pop('image') 
     return Rental.objects.create(listingName=listingName,property=property,city=city, 
      room=room,price=price,image=image) 

Views.py

class FileUploadView(APIView): 
     parser_classes = (FileUploadParser,) 

    def post(self, request, format=None): 
     uploaded_file = request.FILES['file'] 
     print('up_file is',uploaded_file) 
     with open('/media/upload/'+uploaded_file.name, 'wb+') as destination: 
      for chunk in uploaded_file.chunks(): 
       print('chunk',chunk) 
       destination.write(chunk) 
       destination.close() 
     return Response(uploaded_file.name, status.HTTP_201_CREATED) 

class RentalList(generics.ListCreateAPIView): 
    serializer_class = RentalSerializer 
    queryset = Rental.objects.all() 
    def get(self,request,format=None): 
     rental = self.get_queryset() 
     serializer_rental = RentalSerializer(rental,many=True) 
     return Response(serializer_rental.data) 

    @permission_classes((IsAdminUser,)) 
    def post(self,request,format=None): 
     user=request.user 
     serializer_rental = RentalSerializer(data=request.data,context={'user':user}) 
     if serializer_rental.is_valid(): 
      serializer_rental.save() 
      return Response(serializer_rental.data,status=status.HTTP_201_CREATED) 
     return Response(serializer_rental.errors,status=status.HTTP_400_BAD_REQUEST) 


class RentalDetail(generics.RetrieveUpdateDestroyAPIView): 
    queryset=Rental.objects.all() 
    serializer_class = RentalSerializer 

कंसोल पर एक बार

onDrop(files) { 
      console.log('Received files: ', files); 
      this.setState({ 
       files: files 
      }); 
      var image = new FormData(files); 
      console.log('formdata image',image); 
      var multiple_image = files; 
      console.log('multiple_image',multiple_image); 
      $.each(multiple_image,function(i,file){ 
       image.append('image_'+i,file); 
      }); 
      console.log('images are',image); 
      $.ajax({ 
      url:'http://localhost:8000/api/upload/', 
      data:image, 
      contentType:false, 
      processData:false, 
      type:'POST', 
      mimeType: "multipart/form-data", 
      }); 
     } 

अनुरोध पेलोड साथ अनेक छवि भेजने के लिए दृश्यपटल हिस्सा पता चलता सभी images.What मुद्दा हो सकता है? मैंने क्या गल्त किया है?

+0

क्या आप अपनी 'urls.py' फ़ाइल भी पोस्ट कर सकते हैं? यह इस समस्या को आजमाने और पुन: पेश करने में बहुत मदद करेगा। धन्यवाद। – AdelaN

उत्तर

0

मुझे लगता है कि आप सेटिंग.py फ़ाइल में MEDIA_URL और MEDIA_ROOT चूक गए होंगे। यदि आपने इसे याद किया है या गलत तरीके से कॉन्फ़िगर किया है, तो डीजेंगो आपके ओएस के आधार पर आपकी परियोजना के बाहर किसी अन्य स्थान पर फ़ाइल रखेगा (मेरे लिए django फ़ाइल को /home/username/ में रखा गया है)। जांचें कि आपके कंप्यूटर में ऐसा कोई फ़ोल्डर है या नहीं।

यदि आपने सेटिंग्स में MEDIA_URL और MEDIA_ROOT कॉन्फ़िगर किया है तो कृपया उन्हें प्रश्न अपडेट करें।

+0

मैंने अपना प्रश्न media_url और medi_root कॉन्फ़िगरेशन के साथ अपडेट किया। – Tushant

संबंधित मुद्दे