我可以上传现场的时间和员工,但我不能上传图片到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 **,结果是**无**(我认为它不通过串行器) 接下来应该怎么做? –