【发布时间】:2021-01-17 03:39:15
【问题描述】:
鉴于以下人为的示例,我如何POST 到路径中具有 ID 的 URL 并让它解析模型实例,而不是将模型实例包含在 POST 主体本身中?
urls.py
path("api/schools/<int:pk>/student/", views.CreateStudentView.as_view(), name="createStudent")
models.py
class School(models.Model):
name = models.CharField(default="", max_length=128)
address = models.CharField(default="", max_length=128)
mascot = models.CharField(default="", max_length=128)
class StudentModel(models.Model):
first_name = models.CharField(default="", max_length=128)
last_name = models.CharField(default="", max_length=128)
notes = models.CharField(default="", max_length=512)
school = models.ForeignKey(School, on_delete=models.CASCADE)
序列化器.py
class CreateStudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = ("first_name", "last_name")
views.py
class CreateStudentView(generics.CreateAPIView):
serializer_class = CreateStudentSerializer
queryset = Student.objects.all()
我希望能够POST 只是将新学生的名字和姓氏添加到 URL 中,以便在我的数据库中创建一个新学生。但是,因为我没有在 POST 的正文中提供 School 对象,所以我收到错误消息。我希望我的代码能够解析我要将学生添加到哪个学校,因为 URL 包含 ID。
当我将POST 的以下正文发送到/api/schools/1/student/ 时出现错误。 ID 为 1 的学校确实存在于数据库中。
{
"first_name": "John",
"last_name": "Smith"
}
IntegrityError at /api/schools/1/student/
NOT NULL constraint failed: students_school.school_id
【问题讨论】:
标签: django django-models django-rest-framework django-views django-serializer