Ich habe eine schwierige Zeit mit Django Rest Framework für mehrere Bilder hochladen. Was ich will ist, gibt es eine Vermietung Tabelle, wo Benutzer über Vermietung Informationen zusammen mit mehreren Bildern auf einmal füllen (Bilder können wie Küche, Wohnzimmer, Badezimmer usw.) für diese Miete wollen sie sich registrieren. eine Miete kann mehrere Bilder haben, also habe ich Bildfeld mit manytomany Beziehung. Ich konnte nicht mehrere Bilder zum Server oder zur API schicken. Es wird nur ein Bild verwendet, um auf dem Server gespeichert zu werden, aber nach dem Ändern des Datenbankentwurfs und dem Wechseln zur ManyToManyField-Option wird selbst ein einzelnes Bild nicht gespeichert.Django Rest Framework für mehrere Bildupload
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
Frontend Teil auf einmal mehr Bild
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",
});
}
Anfrage Nutzlast für das Senden auf der Konsole zeigt alle images.What könnten das Problem sein? Was habe ich falsch gemacht?
Könnten Sie bitte auch Ihre 'urls.py' Datei posten? Es würde viel helfen, dieses Problem zu reproduzieren. Vielen Dank. – AdelaN