Django 400:请求错误此字段是必需的

2024-05-29 04:24:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Django和restframework jsonapi包开发restapi。 我提出以下要求

curl --location --request POST 'http://localhost:8000/api/students/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "data": {
        "type": "students",
        "attributes": {
            "first_name": "First Name",
            "last_name": "Last Name"
        }
    }
}'

我得到了这个回应

{
    "errors": [
        {
            "detail": "This field is required.",
            "status": "400",
            "source": {
                "pointer": "/data/attributes/first_name"
            },
            "code": "required"
        }
    ]
}

这是我的密码: 型号.py你知道吗

class Student(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

你知道吗序列化程序.py你知道吗

class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student
        fields = ('first_name',)

你知道吗视图.py你知道吗

class StudentsViewSet(viewsets.ModelViewSet):
    queryset = Student.objects.all()
    parser_classes = (JSONParser, FormParser, MultiPartParser)
    serializer_class = StudentSerializer

你知道吗网址.py你知道吗

router = routers.DefaultRouter()
router.register(r'students', views.StudentsViewSet, 'student')


urlpatterns = [
    path('', views.index, name='index'),
    path('api/', include(router.urls))
]

你知道吗设置.py你知道吗

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework_json_api.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser'
    )
}

如果我不使用JSONParser,而是使用普通的django请求格式,而不是jsonapi,那么就可以了。我错过了什么?你知道吗


Tags: namepyrestapidatamodelsframeworkstudent

热门问题