【问题标题】:Django DRF view AttributeErrorDjango DRF 查看 AttributeError
【发布时间】:2022-02-01 03:08:18
【问题描述】:

我正在尝试获取与 request.user 相关的数据,但我做错了。

serializers.py

class SchoolSerializerList(serializers.ModelSerializer):
     class Meta:
           model = School
           fields = ('name', 'zone', 'city', 'subCity', 'abbr',
                     'woreda', 'Schooltype', 'schoolemail', 'schoolphone', 'created_date')

views.py

 class MySchoolsView(generics.ListAPIView):
    permission_classes = [IsSchoolOwner, ]
    serializer_class = SchoolSerializerList

    def get_queryset(request):
        try:
            queryset = School.objects.filter(owner=request.user)
        except ObjectDoesNotExist:
            return Response({"error": "Nothing found."})
        return queryset

学校模型中的所有者字段是用户的外键,我想通过尝试将 request.user 与 School.owner 匹配来检查当前用户是否有任何学校,但这会返回 属性错误说强>

'MySchoolsView' object has no attribute 'user'

【问题讨论】:

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


    【解决方案1】:

    get_queryset 的第一个也是唯一一个参数是self,而不是request。你可以使用self.ruquest访问请求对象,所以:

    class MySchoolsView(generics.ListAPIView):
        permission_classes = [IsSchoolOwner, ]
        serializer_class = SchoolSerializerList
    
        def get_queryset(self):
            return School.objects.filter(owner=self.request.user)

    您的get_queryset 也可以返回Response。您可以提出Http404 错误:

    from django.http import Http404
    
    class MySchoolsView(generics.ListAPIView):
        permission_classes = [IsSchoolOwner, ]
        serializer_class = SchoolSerializerList
    
        def get_queryset(self):
            qs = School.objects.filter(owner=self.request.user)
            if not qs:
                raise Http404('No schools found')
            return qs

    【讨论】:

    • 工作就像一个魅力,我知道我摸索了一个简单的,无论如何,非常感谢我在 8 分钟后打勾
    猜你喜欢
    • 2016-12-13
    • 1970-01-01
    • 2020-04-21
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多