簡體   English   中英

我無法將帖子發送到Django Rest Framework

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

我創建了一個序列化器來發布結果,但是當我嘗試使用郵遞員時,它說值'enrollment_id'為null:

views.py

from rest_framework import generics

from .serializers import ResponseSerializer


class ResponseCreate(generics.CreateAPIView):
    serializer_class = ResponseSerializer

serializers.py

class ResponseSerializer(serializers.ModelSerializer):

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

urls.py

from django.urls import path

from . import views

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

在郵遞員的郵件正文中,我發送以下json:

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

錯誤郵遞員:

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

視圖

在此處輸入圖片說明

編輯:

模型回應:

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, 
        )

您必須在網址格式中指明將允許使用的方法:

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

我可以在錯誤中看到您得到不允許使用`GET方法,這是因為您沒有指示Django允許它。

試試這個視圖:

from rest_framework import viewsets
from .serializers import ResponseSerializer

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

ModelViewSet已經對al方法具有正確的響應,但是您必須在url模式中指出允許哪些方法。

編輯:您的序列化器無需在“模型”字段后添加“ _id”。 應該是這樣的:

class ResponseSerializer(serializers.ModelSerializer):

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

現在,嘗試通過郵遞員對修改后的JSON進行編輯:

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

您需要定義一個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