我试图上传和处理excel文件使用Django和DRF与芹菜。当我试图将文件传递给我的芹菜任务在后台处理时,出现了一个问题,我得到以下错误:
kombu.exceptions.EncodeError: Object of type InMemoryUploadedFile is not JSON serializable
这是我的viewpost请求处理程序:
class FileUploadView(generics.CreateAPIView):
"""
POST: upload file to save data in the database
"""
parser_classes = [MultiPartParser]
serializer_class = FileSerializerXLSX
def post(self, request, format=None):
"""
Allows to upload file and lets it be handled by pandas
"""
serialized = FileSerializerXLSX(data=request.data)
if serialized.is_valid():
file_obj = request.data['file']
# file_bytes = file_obj.read()
print(file_obj)
import_excel_task.delay(file_obj)
print("its working")
return Response(status=204)
return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST)
和我的芹菜任务:
def import_excel_helper(file_obj):
df = extract_excel_to_dataframe(file_obj)
transform_df_to_clientmodel(df)
transform_df_to_productmodel(df)
transform_df_to_salesmodel(df)
@shared_task(name="import_excel_task")
def import_excel_task(file_obj):
"""Save excel file in the background"""
logger.info("Importing excel file")
import_excel_helper(file_obj)
有什么办法来处理导入Excel文件到芹菜任务,使其可以在后台处理的其他功能吗?
与错误中一样,调用芹菜任务的请求体必须是JSON可序列化的,因为它是默认配置。然后在kombu中记录:
JSON的主要缺点是它将您限制为以下数据类型:字符串、Unicode、浮点数、布尔值、字典和列表。明显缺少小数和日期。
假设这是我的excel文件。
file.xlsx
<表类>
一些价值 tbody><<tr>在 :) 表类>