QuerySet 对象在 Django Rest Framework 上没有属性“用户”

Posted

技术标签:

【中文标题】QuerySet 对象在 Django Rest Framework 上没有属性“用户”【英文标题】:QuerySet object has no attribute 'user' on Django Rest Framework 【发布时间】:2017-08-01 18:33:33 【问题描述】:

在 Django Rest Framework 上执行请求时,我无法序列化模型以获取结果。

models.py

class Karfarma(models.Model):
    user = models.OneToOneField(User, related_name='karfarma', on_delete=models.CASCADE)
    mobile = models.TextField(max_length=11)
    validation_number = models.TextField(max_length=5, blank=True, default=None)
    phone_number = models.TextField(max_length=10, blank=True, default=None)
    datetime_join_persian = models.DateTimeField(default=None, null=True)

    def __unicode__(self):
        return "%s %s" % (self.user.first_name, self.user.last_name)

serializers.py

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = '__all__'

views.py

class UserList(APIView):
    queryset = User.objects.all()

    def get(self, request):
        users = User.objects.all()
        serializer = UserSerializer(users)
        return Response(serializer.data)

这是我在执行请求时得到的错误的简化版本:

AttributeError:尝试在序列化程序 UserSerializer 上获取字段 user 的值时出现 AttributeError。 序列化程序字段可能命名不正确,并且与 QuerySet 实例上的任何属性或键都不匹配。 原始异常文本为:“QuerySet”对象没有“用户”属性。

【问题讨论】:

您能否将urls.py 添加到您的问题中,也可能添加views.py。我不明白你的序列化器和你的模型之间的链接...... @LaurentS 我编辑我的问题 尝试序列化器 = UserSerializer(users,many=True) 【参考方案1】:

每当您尝试将查询集传递给序列化程序时,请始终使用UserSerializer(users,many=True) 传递它。如果您只想传递单个用户对象,您可以使用User.objects.get(some_attribue=something),然后将该对象传递给不带many=True 标志的序列化程序。

【讨论】:

它帮助我解决了我的问题。谢谢@Aniruddha Bhondwe 先生 所以,我们也必须在视图中使用 many=True!这个简单的建议解决了我的问题,谢谢【参考方案2】:

我终于找到了问题所在 当您想要获取对象列表时,视图是问题,您应该将参数 many=True 传递给序列化程序。 问题是这样的

【讨论】:

您是否认真接受了您的答案,该答案只是以前发布的正确答案的错误副本?

以上是关于QuerySet 对象在 Django Rest Framework 上没有属性“用户”的主要内容,如果未能解决你的问题,请参考以下文章

重用 Django Rest Framework Generic 视图来获取它的 QuerySet

带有自定义查询的Django Rest框架

Django Rest Framework 'Manager' 对象不可下标

无法发布到 Django REST API

django rest framework custom json format

尝试覆盖django rest框架中的update方法,以在更新后返回整个查询集