You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django REST Framework中从请求获取POST对象并保存模型

如何用Django REST Framework的APIView接收JSON并保存Student模型

嘿,我来帮你搞定这个需求!首先得修正你现有代码里的几个小问题,然后一步步实现接收客户端JSON数据并保存到模型的逻辑。

第一步:修正Student序列化器

你的序列化器目前有几个问题需要调整:

  1. Student模型本身没有username和password字段,这两个属于关联的User模型,所以需要在序列化器里处理User的创建逻辑
  2. create方法里的Student.objects.create写法有误,不需要传self,而且要先从客户端数据创建User对象,再关联到Student

调整后的序列化器代码如下:

from rest_framework import serializers
from django.contrib.auth.models import User
from users.models import Student

class StudentSerializer(serializers.ModelSerializer):
    # 显式声明User的字段,因为Student关联User
    username = serializers.CharField(write_only=True)
    password = serializers.CharField(write_only=True)

    class Meta:
        model = Student
        fields = ('username', 'password', 'grade')

    def create(self, validated_data):
        # 先从验证后的数据中取出User相关字段
        username = validated_data.pop('username')
        password = validated_data.pop('password')
        # 创建User对象(用create_user才能正确加密密码)
        user = User.objects.create_user(username=username, password=password)
        # 创建Student对象并关联刚创建的User
        student = Student.objects.create(user=user, **validated_data)
        return student

第二步:实现APIView的POST方法

接下来在你的CreateUser视图类里重写post方法,用来接收客户端的POST请求,处理JSON数据,用序列化器验证并保存:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .serializers import StudentSerializer

class CreateUser(APIView):
    def post(self, request):
        # 把请求数据传入序列化器
        serializer = StudentSerializer(data=request.data)
        # 验证数据是否合法
        if serializer.is_valid():
            # 保存数据(会自动调用序列化器里的create方法)
            serializer.save()
            # 返回成功响应,包含创建后的核心数据
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        # 验证失败返回详细错误信息
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

第三步:配置URL路由

最后别忘了在你的app的urls.py里配置对应的路由,让请求能映射到这个视图:

from django.urls import path
from .views import CreateUser

urlpatterns = [
    path('create-user/', CreateUser.as_view(), name='create-user'),
]

测试验证

现在你可以用Postman、curl这类工具发送POST请求到/create-user/,请求体用JSON格式:

{
    "username": "test_student",
    "password": "test_pass_123",
    "grade": 10
}

如果数据合法,系统会自动创建对应的User和Student对象,并返回成功响应;如果数据有问题(比如用户名重复、年级不是整数),会返回详细的错误提示。

内容的提问来源于stack exchange,提问作者saleh sereshki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:03:55