简体   繁体   English

我无法将帖子发送到Django Rest Framework

[英]I can not send a post to django rest framework

I created a serializer to post a results, but when I try to use postman it says that the value 'enrollment_id' is null: 我创建了一个序列化器来发布结果,但是当我尝试使用邮递员时,它说值'enrollment_id'为null:

views.py views.py

from rest_framework import generics

from .serializers import ResponseSerializer


class ResponseCreate(generics.CreateAPIView):
    serializer_class = ResponseSerializer

serializers.py serializers.py

class ResponseSerializer(serializers.ModelSerializer):

    class Meta:
        model = Response
        fields = (
            'enrollment_id',
            'evaluation_id',
            'question_id',
            'question_component_id',
            'user_id',
        )

urls.py urls.py

from django.urls import path

from . import views

urlpatterns = [
    path('', views.ResponseCreate.as_view()),
]

In the postman post body I send the following json: 在邮递员的邮件正文中,我发送以下json:

{
    "enrollment_id": 1,
    "user_id": 2,
    "question_component_id": 2,
    "question_id": 1,
    "evaluation_id": 1
}

Error postman: 错误邮递员:

IntegrityError at /response/
null value in column "enrollment_id" violates not-null constraint
DETAIL:  Failing row contains (9, null, null, null, null, null).

view 视图

在此处输入图片说明

Edit: 编辑:

Model Response: 模型回应:

class Response(models.Model):
    user = models.ForeignKey(
        User, 
        on_delete=models.CASCADE, 
        )
    enrollment = models.ForeignKey(
        Enrollment, 
        on_delete=models.CASCADE, 
        )
    evaluation = models.ForeignKey(
        Evaluation,
        on_delete=models.CASCADE, 
        )
    question = models.ForeignKey(
        Question,
        on_delete=models.CASCADE, 
        )
    question_component = models.ForeignKey(
        Question_Component,
        on_delete=models.CASCADE, 
        )

You have to indicate in your url patter the methods that are going to be allowed: 您必须在网址格式中指明将允许使用的方法:

urlpatterns = [
    path('', views.ResponseCreate.as_view({'get': 'list'})),
]

I can see in the error you get that `GET method is not allowed, that's because you didn't indicate Django to allow it. 我可以在错误中看到您得到不允许使用`GET方法,这是因为您没有指示Django允许它。

Try this view: 试试这个视图:

from rest_framework import viewsets
from .serializers import ResponseSerializer

class ResponseCreate(viewsets.ModelViewSet):
    queryset = models.Response.objects.all()
    serializer_class = serializers.ResponseSerializer

ModelViewSet has already the proper response for al methods, but you have to indicate in your url pattern which ones are allowed. ModelViewSet已经对al方法具有正确的响应,但是您必须在url模式中指出允许哪些方法。

Edit: Your serializer need not add '_id' after the Model fields. 编辑:您的序列化器无需在“模型”字段后添加“ _id”。 It should be like this: 应该是这样的:

class ResponseSerializer(serializers.ModelSerializer):

    class Meta:
        model = Response
        fields = (
            'enrollment',
            'evaluation',
            'question',
            'question_component',
            'user',
        )

Now try seding the modified JSON via Postmen: 现在,尝试通过邮递员对修改后的JSON进行编辑:

{
  "enrollment": 1,
  "user": 2,
  "question_component": 2,
  "question": 1,
  "evaluation": 1
}

You need to define a queryset in your view: 您需要定义一个queryset在您的看法:

class ResponseCreate(generics.CreateAPIView):
    queryset = Response.objects.all()
    serializer_class = ResponseSerializer

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM