मुझे कई छवि अपलोड के लिए 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 मुद्दा हो सकता है? मैंने क्या गल्त किया है?
क्या आप अपनी 'urls.py' फ़ाइल भी पोस्ट कर सकते हैं? यह इस समस्या को आजमाने और पुन: पेश करने में बहुत मदद करेगा। धन्यवाद। – AdelaN