Я не могу отправить пост в django остальные рамки - PullRequest
0 голосов
/ 02 февраля 2019

Я создал сериализатор для публикации результатов, но когда я пытаюсь использовать почтальон, он говорит, что значение 'enrollment_id' равно нулю:

views.py

from rest_framework import generics

from .serializers import ResponseSerializer


class ResponseCreate(generics.CreateAPIView):
    serializer_class = ResponseSerializer

сериализаторы.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).

просмотр

enter image description here

Редактировать:

Модель Ответ:

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

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Edit: ваш сериализатор не должен добавлять '_id' после полей Model.Это должно выглядеть следующим образом:

class ResponseSerializer(serializers.ModelSerializer):

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

Теперь попробуйте заполнить измененный JSON с помощью Postmen:

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

Вам необходимо определить queryset по вашему мнению:

class ResponseCreate(generics.CreateAPIView):
    queryset = Response.objects.all()
    serializer_class = ResponseSerializer
0 голосов
/ 02 февраля 2019

Вы должны указать в своем шаблоне URL методы, которые будут разрешены:

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

Я вижу в ошибке, которую вы получаете, что `GET метод не разрешен, потому что вы не сделали 't указывает Django разрешить его.

Попробуйте это представление:

from rest_framework import viewsets
from .serializers import ResponseSerializer

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

ModelViewSet уже имеет правильный ответ для всех методов, но вы должны указать в своем URLшаблон, какие из них разрешены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...