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 上没有属性“用户”的主要内容,如果未能解决你的问题,请参考以下文章