![](/img/trans.png)
[英]Django REST Framework upload image: “The submitted data was not a file”
[英]Django rest framework error while uploading image, submitted data is not file
我是 Django 休息框架的新手,當我嘗試通過 Postman 和 python 腳本本身進行發布請求時,它會顯示錯誤
{'bloodbank_logo': ['提交的數據不是文件。 檢查表單上的編碼類型。']}
但是當我嘗試使用 django admin 發布圖像時沒有錯誤。
我的模型.py
from django.db import models
from django.conf import settings
from django.contrib.auth.models import User
# Create your models here.
class Bloodbanks(models.Model):
bloodbank_user=models.ForeignKey(User, on_delete=models.CASCADE)
fullbankname=models.CharField(max_length=80,blank=False,default='Null')
apositive=models.PositiveIntegerField()
anegative=models.PositiveIntegerField()
bpositive=models.PositiveIntegerField()
bnegative=models.PositiveIntegerField()
abpositive=models.PositiveIntegerField()
abnegative=models.PositiveIntegerField()
opositive=models.PositiveIntegerField()
onegative=models.PositiveIntegerField()
latitude=models.CharField(max_length=20,blank=False,default='Null')
longitude=models.CharField(max_length=20,blank=False,default='Null')
state = models.CharField(max_length=100)
district=models.CharField(max_length=20,blank=False,default='Null')
location=models.CharField(max_length=20,blank=False,default='Null')
website = models.CharField(max_length=100, blank=True)
bloodbank_logo=models.ImageField(blank=False)
bloodbank_description=models.CharField(blank=True,max_length=200)
bloodbank_phone=models.CharField(blank=True,max_length=10)
def __str__(self):
return self.fullbankname
我的序列化程序.py
from rest_framework import serializers,reverse
from bloodbank_api.models import Bloodbanks
class BloodbankdataSerializer(serializers.ModelSerializer):
bloodbanks_user=serializers.PrimaryKeyRelatedField(source='user.username',read_only=True)
url = serializers.HyperlinkedIdentityField(
view_name='bloodbank-detail-id',
lookup_field='pk'
)
bloodbank_logo=serializers.ImageField
class Meta:
model=Bloodbanks
fields=['id','bloodbanks_user','fullbankname','apositive',
'anegative','bpositive','bnegative','abpositive',
'abnegative','opositive','onegative','latitude',
'longitude','state','district','location','website',
'bloodbank_logo','bloodbank_description','bloodbank_phone','url']
視圖.py
from bloodbank_api.models import Bloodbanks
from bloodbank_api.serializers import BloodbankdataSerializer
from rest_framework import status,mixins,generics
from rest_framework.parsers import FormParser, MultiPartParser,JSONParser
from rest_framework.response import Response
from django.contrib.auth.models import User
# Create your views here
#updatelistpostput by primary key
class BloodbankDataDetail(mixins.ListModelMixin,
mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView):
queryset = Bloodbanks.objects.all()
serializer_class = BloodbankdataSerializer
parser_class=(MultiPartParser,JSONParser, FormParser)
lookup_field = 'pk'
def get(self, request,*args, **kwargs):
id=kwargs.get('pk')
if id is not None:
return self.retrieve(request,*args, **kwargs)
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
print(args,kwargs)
return self.create(request, *args, **kwargs)
def perform_create(self, serializer):
serializer.save(bloodbank_user=self.request.user)
網址.py
from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from bloodbank_api.views import BloodbankDataDetail
from django.conf import settings
from django.conf.urls.static import static
urlpatterns=[
path('bloodbank/',BloodbankDataDetail.as_view(),name='bloodbank-detail'),
path('bloodbank/<int:pk>/',BloodbankDataDetail.as_view(),name='bloodbank-detail-id'),
]
urlpatterns = format_suffix_patterns(urlpatterns)+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我用來發布的python腳本做發布請求
import requests
endpoint='http://127.0.0.1:8000/bloodbank/'
data={
"fullbankname": "Dirgahyu",
"apositive": '1',
"anegative": '1',
"bpositive": '1',
"bnegative": '1',
"abpositive": '1',
"abnegative": '1',
"opositive": '1',
"onegative": '1',
"latitude": "dhdhd",
"longitude": "hdhdd",
"state": "dhhd",
"district": "dhdhgd",
"location": "dhdhdhd",
"website": "jdjdjd",
"bloodbank_logo": "/Users/aayushdipgiri/aayu's code/opencv/cat.jpeg",
"bloodbank_description": "hahaha",
"bloodbank_phone": "hhdhddh"
}
get_response = requests.post(endpoint, json=data)
print(get_response.json())
我注意到的第一件事是您不是在發送圖像,而是在發送字符串。 試試這個,而不是通過requests
模塊發送文件。
"bloodbank_logo": open("/Users/aayushdipgiri/aayu's code/opencv/cat.jpeg", "rb"),
如果這不起作用,我會嘗試使用 django 的FileField
,但我不會詳細說明,因為上面應該可以工作或至少給你一個不同的錯誤消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.