我可以上傳現場的時間和員工,但我不能上傳圖片到attendance_pic如何通過請求上傳圖片:Python的Django的REST框架
型號
class Attendance(models.Model):
time = models.DateTimeField(default=datetime.now, blank=True)
employee = models.ForeignKey(Employee, related_name='employees')
attendance_pic = models.ImageField(upload_to='attendance_pics',null = True)
串行器
class AttendanceSerializer(serializers.ModelSerializer):
class Meta:
model = Attendance
fields = '__all__'
查看
class AttendanceList(APIView):
def get(self,request):
model = models.Attendance
attendances = model.objects.all()
serializer = AttendanceSerializer(attendances, many = True)
return Response(serializer.data)
def post(self,request):
now = timezone.now()
serializer = AttendanceSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
if serializer.is_valid():
serializer.save(time=now)
# print (serializer.validated_data)
# emp = serializer.validated_data.get("employee")
# obj = models.Attendance.objects.create(time=now, employee=emp)
return Response("Success", status=status.HTTP_201_CREATED)
# return Response(AttendanceSerializer(obj).data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
請求
f = open("pic.jpg","rb")
r = requests.post(self.url,data={"employee":ID,"attendace_pic":f})
如果我編碼f控制base64.encodebase64,串行器將允許request.data但它將成爲無我無法解碼它,如果我只是通過它沒有編碼串行器將不會允許。
或者我應該使用FileUploadParser。
是什麼意思,你無法解碼呢?你能告訴我們你的請求處理代碼和發生了什麼嗎? – AlVaz
@AlVaz結果如果使用** base64.encodebase64 ** {'employee':['25'],'attendance_pic':['/ 9j/4AAQSkZJ ...']} 但是當我使用** decodebase64 **,結果是**無**(我認爲它不通過串行器) 接下來應該怎麼做? –