django rest framework 错误要求字段

2024-09-25 00:20:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在遵循http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/上的教程(这很好),但我已经到了最后,我正在运行命令

a-http管理员:密码123 POSThttp://127.0.0.1:8000/snippets/code=“打印789”

它给了我一个错误:

HTTP/1.1 400 Bad Request Allow: GET, POST, HEAD, OPTIONS Content-Length: 37 Content-Type: application/json Date: Wed, 28 Feb 2018 18:29:15 GMT Server: WSGIServer/0.2 CPython/3.6.3 Vary: Accept, Cookie X-Frame-Options: SAMEORIGIN

{ "owner": [ "This field is required." ] }

owner字段在browseableapi上也可见,为我创建的所有用户提供了选项。当保存它时(无论是浏览器还是命令行),它确实保存了发出请求的用户,以便部件是正确的。我认为它不应该在可浏览的api上可见,也不应该在api调用中被要求,因为它从请求中得到了它。在

这是我的代码:

在视图.py公司名称:

class SnippetList(generics.ListCreateAPIView):
  queryset = Snippet.objects.all()
  serializer_class = SnippetSerializer
  permission_classes = (permissions.IsAuthenticatedOrReadOnly,)

  def perform_create(self, serializer):
    serializer.save(owner=self.request.user)

在模型.py公司名称:

^{pr2}$

在序列化程序.py在

class SnippetSerializer(serializers.ModelSerializer):
  class Meta:
    model = Snippet
    fields = ('id', 'title', 'code', 'linenos', 'language', 'style', 'owner')
    owner = serializers.ReadOnlyField(source='owner.username')

Tags: 用户pyself名称apihttppermissionscode
2条回答

在序列化程序中,您将字段定义为类的属性,而不是在Meta中。试试这个:

class SnippetSerializer(serializers.ModelSerializer):
  owner = serializers.ReadOnlyField(source='owner.username')
  class Meta:
    model = Snippet
    fields = ('id', 'title', 'code', 'linenos', 'language', 'style', 'owner')
class SnippetList(generics.ListCreateAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)

    def perform_create(self, serializer):
        serializer.validated_data['owner'] = self.request.user
        serializer.save()

class SnippetSerializer(serializers.ModelSerializer):
      class Meta:
      model = Snippet
      fields = ('id', 'title', 'code', 'linenos', 'language', 'style', 'owner')
      read_only_fields = ('owner',)

必须在序列化程序验证的数据中分配值。在

相关问题 更多 >