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

如何用Postman向Django服务器发送指定格式POST请求并解决必填字段错误?

解决Postman向Django发送嵌套JSON POST请求时的"user字段必填"错误

我之前也碰到过一模一样的问题,大概率是Postman的请求配置没到位,导致Django没法正确解析你发送的JSON数据。咱们一步步来排查解决:

第一步:检查Postman的请求头(最关键!)

Django默认只会把Content-Type设为application/json的请求体解析成JSON格式。如果没设置这个头,Postman会默认用表单格式发数据,Django根本识别不到你嵌套的user字段,自然会返回"user字段必填"的错误。

操作步骤:

  • 打开你的POST请求,切换到Headers标签页
  • 添加一条键值对:
    • 键:Content-Type
    • 值:application/json

第二步:确认请求体的格式设置

确保你在Postman里正确选择了JSON格式的请求体:

  • 切换到Body标签页
  • 选中raw选项
  • 在右侧的下拉菜单里,一定要选择JSON(别选Text、JavaScript或者其他)
  • 粘贴你的JSON数据,注意检查语法(比如引号是英文半角,逗号没有遗漏):
{ 
  "user": { 
    "first_name": "Satyam", 
    "last_name": "Gondhale", 
    "username": "satyam@gmail.com", 
    "email": "satyam@gmail.com", 
    "groups": [], 
    "is_active": true 
  }, 
  "phone": "9028571487", 
  "address": "Pune" 
}

第三步:验证Django后端的序列化器配置(如果Postman设置没问题的话)

如果上面两步都做了还是报错,那得看看Django端的序列化器是不是正确处理了嵌套结构。假设你用Django REST Framework(DRF),你的序列化器应该类似这样:

from rest_framework import serializers
from django.contrib.auth.models import User
# 假设你有一个关联User的Profile模型
from .models import Profile

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'username', 'email', 'groups', 'is_active']

class ProfileSerializer(serializers.ModelSerializer):
    user = UserSerializer()  # 用嵌套序列化器处理user字段

    class Meta:
        model = Profile
        fields = ['user', 'phone', 'address']

    def create(self, validated_data):
        # 先取出user的数据创建User实例
        user_data = validated_data.pop('user')
        user = User.objects.create(**user_data)
        # 再创建Profile实例关联这个User
        profile = Profile.objects.create(user=user, **validated_data)
        return profile

同时,你的视图类要确保使用DRF的视图基类(比如APIView或者CreateAPIView),这样才能自动解析JSON请求体:

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

class CreateProfileView(APIView):
    def post(self, request):
        serializer = ProfileSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

最后再测试一次

把Postman的请求头和请求体都配置好之后,点击Send,应该就能正常创建数据了。如果还是有问题,可以打开Postman的Console标签,查看发送的请求详情,确认Content-Type头是否正确,请求体是不是你要发送的JSON。

内容的提问来源于stack exchange,提问作者Satyam Gondhale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:52:33