Почему Django rest framework не сохраняет данные, а возвращает код 200 ok
Я успешно отправил пост-запрос на развернутый (в Heroku) Django rest API из react axios, но данные не сохраняются в моей базе данных. В качестве базы данных я использую MongoDB (Djongo). Позвольте мне показать вам код, который я использовал.
settings.py
serializers.py
class ExcelUploaderWithClient(serializers.Serializer):
file = serializers.FileField()
client = serializers.IntegerField()
business_process = serializers.IntegerField()
views.py
class UploadBusinessImpactExcelBySuperUSer(APIView, ExcelHandlingView):
permission_classes = (
IsAuthenticated,
permissions.IsCybermindAdmin,
)
def post(self, request):
self.can_model_handle_ExcelHandlingView(models.BusinessImpact)
serializer = serializers.ExcelUploaderWithClient(
data=request.data)
if serializer.is_valid():
data = serializer.validated_data
file = data.get("file")
client = data.get("client")
business_process_id = data.get("business_process")
try:
business_process = get_business_process_by_client(
client, business_process_id
)
except (
models.BusinessProcess.DoesNotExist,
accountModels.Client.DoesNotExist,
) as e:
return Response(
"business process or client does not exist",
status=status.HTTP_404_NOT_FOUND,
)
if (
file.content_type
== "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
):
# self.delete_every_recore_on_that_model(models.BusinessImpact)
self.delete_every_record_that_match_criteria(
models.BusinessImpact,
{"client": client, "business_process": business_process},
)
excel_file = pd.read_excel(file)
data = pd.DataFrame(
excel_file,
columns=self.get_excel_fields(
models.BusinessImpact.excel_titles),
)
for _, row in data.iterrows():
self.create_model_object(
models.BusinessImpact,
row,
{"client": client, "business_process": business_process.id},
)
return Response("Successfully Loaded data from excel.")
else:
return Response(
{"file": ["File type must be excel with .xlxs extension."]},
status=status.HTTP_400_BAD_REQUEST,
)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Я использовал React Axios для пост-запроса и вот код
const handleUploadFile = (e) => {
let myfile = file;
let formData = new FormData();
formData.append("file", myfile);
formData.append("client", company_name);
formData.append("business_process", business);
http({
url: "https://cyberminds-backend.herokuapp.com/api/business_process/upload-business-impact-excel-by-superuser",
method: "POST",
mode: "cors",
data: formData,
headers: { "Content-Type": "multipart/form-data" },
}).then(
(response) => {
alert("File uploaded Sesscessfullyyyyy");
},
(err) => {
console.log(err);
}
);
};
Вот запрос из chrome dev tools.
Как я могу сохранить данные поста в моей базе данных?
Спасибо
Причина, по которой вы загружаете файлы и не сохраняете их, заключается в том, что вы не установили staticfiles в настройках. Добавьте эти параметры в настройках под static url:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'staticfiles/static/')
]
и запуск python manage.py collectstatics на вашем сервере
