在继承mixins.CreateModelMixin后POST接口上传数据时的处理顺序是view–>serializers–>model,在view中可以通过重写crete方法直接读取请求中附带的excl文件后赋值其他字段并插入model
def create(self, request, *args, **kwargs):
f = request.FILES.get('excl_flie')
if f:
wb = xlrd.open_workbook(filename=None, file_contents=f.read())
table = wb.sheets()[0]
rows = table.nrows
for i in range(1, rows):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
row = table.row_values(i)
serializer.validated_data['ba_item_no'] = row[0]
serializer.validated_data['ba_item_all'] = Production.objects.filter(code=row[0])[0]
serializer.validated_data['suplier'] = row[1]
serializer.validated_data['suplier_all'] = Supplier.o