如何在Django中使用芹菜上传和处理大型excel文件?



我试图上传和处理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>在:)

相关内容

  • 没有找到相关文章

最新更新