Saltar al contenido

Subida de imagen de Django REST Framework

Te traemos la solución a este enigma, o por lo menos eso creemos. Si continuas con inquietudes dínoslo y sin pensarlo

Solución:

puede crear un punto final separado para cargar imágenes, sería así:

class ProductViewSet(BaseViewSet, viewsets.ModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

    @detail_route(methods=['post'])
    def upload_docs(request):
        try:
            file = request.data['file']
        except KeyError:
            raise ParseError('Request has no resource file attached')
        product = Product.objects.create(image=file, ....)

puedes darle la vuelta a esa solución

— actualización: así es como se carga desde cartero
ingrese la descripción de la imagen aquí

Últimamente inicio Django y tengo el mismo problema para cargar la imagen.

Todos los pasos que hice

1) Instale Pillow para usar ImageField

pip install Pillow

2) en Settings.py agrega estas lineas

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/' # 'http://myhost:port/media/'

3) Usar ImageField en model.py (crear nameFile función para crear carpeta y nombre de archivo)

def nameFile(instance, filename):
    return '/'.join(['images', str(instance.name), filename])

class UploadImageTest(models.Model):
    name = models.CharField(max_length=100)
    image = models.ImageField(upload_to=nameFile, blank=True, null=True)

4) serializador.py

class ImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = UploadImageTest
        fields = ('name', 'image')

5) vistas.py

class ImageViewSet(ListAPIView):
    queryset = UploadImageTest.objects.all()
    serializer_class = ImageSerializer

    def post(self, request, *args, **kwargs):
        file = request.data['file']
        image = UploadImageTest.objects.create(image=file)
        return HttpResponse(json.dumps('message': "Uploaded"), status=200)

6) urls.py: agregue esta línea

path('upload/', views.ImageViewSet.as_view(), name='upload'),

7) admin.py: agregue esta línea

admin.site.register(UploadImageTest)

8) en terminal

python manage.py makemigrations

python manage.py migrate

Tienes la opción de añadir valor a nuestro contenido contribuyendo tu experiencia en las ilustraciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *