reactify react framework example python ajax django django-rest-framework

python - example - react django rest framework



Marco de descanso django para carga de imágenes múltiples (1)

Estoy teniendo problemas con Django Rest Framework para cargar imágenes múltiples. Lo que quiero es que haya una mesa de alquiler donde el usuario complete la información de alquiler junto con varias imágenes a la vez (las imágenes pueden ser como cocina, sala de estar, baño, etc.) por ese alquiler que quieren registrar. una renta puede tener múltiples imágenes, así que tengo un campo de imagen con una relación manytomany. No pude enviar varias imágenes al servidor o a la API. Solo se almacena una imagen en el servidor, pero después de cambiar el diseño de mi base de datos y acceder a la opción ManyToManyField, ni siquiera se almacenará una sola imagen.

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

Parte frontal para enviar imágenes múltiples a la vez

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", }); }

La carga de solicitud en la consola muestra todas las imágenes. ¿Cuál podría ser el problema? ¿Qué he hecho mal?


Creo que habría omitido MEDIA_URL y MEDIA_ROOT en el archivo settings.py. Si lo perdió o lo configuró incorrectamente, django colocaría el archivo en otra ubicación fuera de su proyecto, según su sistema operativo (para mí, django colocó el archivo en /home/username/ ). Verifique si hay alguna carpeta de ese tipo en su computadora.

Si configuró MEDIA_URL y MEDIA_ROOT en settings.py, por favor, actualice la pregunta.