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
Ú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.