J'ai un modèle de produit:
def productFile(instance, filename):
return '/'.join( ['products', str(instance.id), filename] )
class Product(models.Model):
...
image = models.ImageField(
upload_to=productFile,
max_length=254, blank=True, null=True
)
...
Ensuite, j'ai sérialiseur:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = (
...
'image',
...
)
Et puis j'ai des vues:
class ProductViewSet(BaseViewSet, viewsets.ModelViewSet):
queryset = Product.objects.all()
serializer_class = ProductSerializer
Comment puis-je télécharger une image avec Postman? Quelles sont les meilleures pratiques pour télécharger l'image sur le modèle? Merci.
vous pouvez créer un point de terminaison distinct pour le téléchargement d'images, ce serait comme ça:
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, ....)
vous pouvez contourner cette solution
J'ai récemment commencé Django et j'ai le même problème pour télécharger l'image.
Toutes les étapes que j'ai faites
1) Installez l'oreiller pour utiliser ImageField
pip install Pillow
2) Dans Settings.py
ajoutez ces lignes
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
3) Utilisez ImageField dans model.py (fonction create nameFile
pour créer le dossier et le nom du fichier)
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, max_length=254, blank=True, null=True)
4) serializer.py
class ImageSerializer(serializers.ModelSerializer):
class Meta:
model = UploadImageTest
fields = ('name', 'image')
5) views.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: ajoutez cette ligne
path('upload/', views.ImageViewSet.as_view(), name='upload'),
7) admin.py: ajoutez cette ligne
admin.site.register(UploadImageTest)
8) dans le terminal
python manage.py makemigrations
python manage.py migrate