モデル製品があります:
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
)
...
次に、シリアライザーがあります:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = (
...
'image',
...
)
そして、私は意見があります:
class ProductViewSet(BaseViewSet, viewsets.ModelViewSet):
queryset = Product.objects.all()
serializer_class = ProductSerializer
Postmanで画像をアップロードするにはどうすればよいですか?モデルに画像をアップロードするためのベストプラクティスは何ですか?ありがとうございました。
画像をアップロードするために別のエンドポイントを作成できます。それは次のようになります。
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, ....)
その解決策を試すことができます
最近Djangoを開始しましたが、画像のアップロードでも同じ問題があります。
私がしたすべてのステップ
1)ImageFieldを使用するための枕のインストール
pip install Pillow
2)Settings.py
これらの行を追加
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
3)model.pyでImageFieldを使用します(フォルダーとファイル名を作成するためにnameFile
関数を作成します)
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:この行を追加
path('upload/', views.ImageViewSet.as_view(), name='upload'),
7)admin.py:この行を追加します
admin.site.register(UploadImageTest)
8)ターミナル内
python manage.py makemigrations
python manage.py migrate