从 Django Rest API 默认路由器获取时出现 500(内部服务器错误)(创建对象)

500 (Internal Server Error) when fetching from Django Rest API default router (to create object)

我正在尝试让 Django 和 React 一起工作,虽然我有 Django 的基础知识(我可以开发一个网站),但我才刚刚开始学习 React。

我的项目结构是根据this video which is loosely based on this blog依次

我的 API 工作得很好,我可以毫无问题地创建、检索、更新和删除对象。

此外,在我的前端,我通过获取相关的 API Url.

成功地从我的数据库中正确显示了项目列表

为了说清楚,这里是主要的 'backend' urls.py:

from rest_framework import routers
from .views import AssessmentViewSet

router = routers.DefaultRouter()
router.register('api/assessments', AssessmentViewSet, 'assessments')

urlpatterns = router.urls

现在,根据我在 API 网页上看到的内容,对象是在同一个 Url 上创建和检索的,即 http://127.0.0.1:8000/api/assessments/,正如您从该屏幕截图中看到的那样。

我想唯一的区别是,当我想创建一个对象时,我所要做的就是在 fetch 函数中指定,我正在发出 POST 请求.这是在我的 CreateAssessmentForm.jsx 文件中完成的:

import React, { Component } from "react";

class CreateAssessmentForm extends Component {
  state = {
    loading: false,
    title: "",
    is_finished: false,
    created_at: "",
  };

  constructor(props) {
    super(props);
    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  handleChange(event) {
    let value = event.target.value;
    console.log("Value: ", value);
    this.setState({
      title: value,
    });
  }

  handleSubmit(event) {
    event.preventDefault(console.log("Item:", this.state));
    fetch("http://127.0.0.1:8000/api/assessments", {
      method: "POST",
      headers: {
        "Content-type": "application/json",
      },
      body: JSON.stringify(this.state.title),
    }).then(response => {
      this.setState({
        loading: false,
        title: "",
        is_finished: false,
        created_at: "",
      }).catch(function (error) {
        console.log("ERROR:", error);
      });
    });
  }

  render() {
    return (
      <div>
        {this.state.loading ? (
          <div className="text-center">Loading...</div>
        ) : (
          <form onSubmit={this.handleSubmit} method="POST">
            <h2 className="text-center">Assessment Title</h2>
            <div className="form-group">
              <label htmlFor="Title">Title</label>
              <input
                onChange={this.handleChange}
                type="text"
                className="form-control"
                id="TitleInput"
                value={this.state.title}
                placeholder="E.g. History Quiz"
              />
            </div>
            <button type="submit" className="btn btn-primary">
              Submit
            </button>
          </form>
        )}
      </div>
    );
  }
}

export default CreateAssessmentForm;

当我在 title 输入中输入内容时,控制台会正确记录每个条目,当我按下提交 button 时,它还会记录一个对象(正如您从代码中看到的那样以上是我的实际 state - {this.state})。

问题是在提交时,我得到一个 500 (Internal Server Error) 并且该对象没有保存在后端数据库中。

有谁知道我做错了什么吗?

最好的方法是在收到内部服务器错误时检查 django 日志是什么。应该很清楚你做错了什么,如果没有,请post错误日志。