Метод запроса POST не работает в Django Rest Framework - PullRequest
0 голосов
/ 17 декабря 2018

Всякий раз, когда я пытаюсь выполнить пост-запрос, я получаю следующую ошибку:

TypeError at / api /

Прямое назначение передней стороне множества «многие ко многим» запрещено,Вместо этого используйте project_team.set ().

Метод запроса: URL-адрес запроса POST: http://127.0.0.1:8000/api/ Версия Django: 2.0 Тип исключения: TypeError Значение исключения:

Прямое назначение передней сторонеиз множества ко многим запрещено.Вместо этого используйте project_team.set ().

Расположение исключения: C: \ Users \ Siddhesh \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ db \ models \ fields \ related_descriptors.py в set , строка 509 Исполняемый файл Python: C: \ Users \ Siddhesh \ AppData \ Local \ Programs \ Python \ Python36 \ python.exe Версия Python: 3.6.3 Путь к Python:

['C: \ Users \ Siddhesh \ Desktop \ TechForSocial \ backend', 'C: \ Users \ Siddhesh \ AppData \ Local \ Programs \ Python \ Python36 \ python36.zip', 'C: \ Users \ Siddhesh \ AppData \ Local\ Programs \ Python \ Python36 \ DLLs ',' C: \ Users \ Siddhesh \ AppData \ Local \ Programs \ Python \ Python36 \ lib ',' C: \ Users \ Siddhesh \ AppData \ Local \ Programs \ Python \ Python36 ','C: \ Users \ Siddhesh \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages', 'C: \ Users \ Siddhesh \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ pytz-2018.5-py3.6.egg ']

Время сервера: понедельник, 17 декабря 2018 г. 17: 57: 57

Код: Models.py

class DummyPeopleModel(models.Model):

    person_name = models.CharField(max_length=45)

    def __str__(self):

        return self.person_name


class ActiveProject(models.Model):

    project_name = models.CharField(max_length=30)
    project_abstract = models.CharField(max_length=1000)
    project_paper = models.CharField(max_length=1000)
    project_team = models.ManyToManyField(DummyPeopleModel, help_text='Team that works on this Project' )
    project_join_us = models.CharField(max_length=1000)

    def __str__(self):
        return self.project_name

serializers.py
from rest_framework import serializers
from .models import ActiveProject


class ActiveProjectSerializer(serializers.ModelSerializer):

    class Meta:

        model = ActiveProject
        fields = ('id', 'project_name', 'project_abstract', 'project_paper', 'project_team', 'project_join_us',)

    def create(self, validated_data):
        return ActiveProject.objects.create(**validated_data)

views.py
class ProjectList(generics.ListAPIView):
    queryset = ActiveProject.objects.all()
    serializer_class = ActiveProjectSerializer

    def post(self, request):

        serializer = ActiveProjectSerializer(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)


class ProjectDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = ActiveProject.objects.all()
    serializer_class = ActiveProjectSerializer

1 Ответ

0 голосов
/ 17 декабря 2018

согласно документации , указание project_team в качестве PrimaryKeyRelatedField(many=True) в сериализаторе может помочь (хотя не устанавливайте read_only)

...