【问题标题】:POST Request Method not working in Django Rest FrameworkPOST 请求方法在 Django Rest Framework 中不起作用
【发布时间】:2019-05-18 03:32:10
【问题描述】:

每当我尝试发布请求时,都会出现以下错误:

/api/ 处的类型错误

直接分配到多对多集合的前端是 禁止。请改用 project_team.set()。

请求方法:POST 请求 URL: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']

服务器时间:2018年12月17日星期一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

【问题讨论】:

    标签: python django rest api django-rest-framework


    【解决方案1】:

    根据the documentation,在序列化程序中将project_team 指定为PrimaryKeyRelatedField(many=True) 可能会有所帮助(尽管不要将其设置为read_only

    【讨论】:

    • '关系字段必须提供queryset 参数,' AssertionError: 关系字段必须提供queryset 参数,覆盖get_queryset,或设置read_only=True
    • 使用all()应该没问题,即queryset=DummyPeopleModel .objects.all()
    • 现在使用这个:project_team=serializers.PrimaryKeyRelatedField(queryset=DummyPeopleModel.objects.all(), many=True) 仍然报同样的错误
    猜你喜欢
    • 2018-12-22
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 2017-11-08
    • 2019-05-04
    • 2019-02-12
    • 2021-07-30
    相关资源
    最近更新 更多