Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django objects.get():精确查找的QuerySet值必须限制为使用切片的一个结果_Python_Django_Django Rest Framework_Django Views - Fatal编程技术网

Python Django objects.get():精确查找的QuerySet值必须限制为使用切片的一个结果

Python Django objects.get():精确查找的QuerySet值必须限制为使用切片的一个结果,python,django,django-rest-framework,django-views,Python,Django,Django Rest Framework,Django Views,我试图根据电子邮件地址检查数据库中是否存在用户,因此我收到电子邮件,如果该电子邮件存在,我希望返回该用户的用户名以及其他一些数据 我正在使用objects.get()方法来执行此操作,但我一直遇到此错误 对它进行了一些搜索,一些解决方案建议进行筛选并返回.first()对象,或者建议将email=email[0]放在email=email[0]中,但这两种方法最终都给了我一个空数组作为响应 以下是我的观点.py: class CheckEmailView(APIView): permission

我试图根据电子邮件地址检查数据库中是否存在用户,因此我收到电子邮件,如果该电子邮件存在,我希望返回该用户的用户名以及其他一些数据

我正在使用objects.get()方法来执行此操作,但我一直遇到此错误

对它进行了一些搜索,一些解决方案建议进行筛选并返回.first()对象,或者建议将email=email[0]放在email=email[0]中,但这两种方法最终都给了我一个空数组作为响应

以下是我的观点.py:

class CheckEmailView(APIView):
permission_classes = [AllowAny]

def post(self, request, *args, **kwargs):
    serializer = CheckEmailSerializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    email = Account.objects.filter(email=serializer.data['email'])
    if email.exists():
        username = Account.objects.get(email=email)
        return Response({'is_member': True, 'username': username})
    else:
        return Response({'is_member': False})

当您想要访问同一数据集中的其他列时,无需对
帐户
执行两次查询

只需从初始筛选器中调用所需的字段

需要注意的是,如果过滤器存在,则可以返回多行,如果您希望确保只返回第一行,请将
.first()
添加到过滤器中

现在您可以调用以下命令来返回用户名

email.username

为什么要对
帐户
执行两个查询?您的筛选器是否返回结果?如果是这样,您只需使用
电子邮件下的
查询集
@PacketLoss第一个查询返回电子邮件是否存在,第二个查询返回现有用户的用户名,但会抛出该错误。过滤器返回的结果是。但我不知道如何使用电子邮件下的查询集来获取用户名。你能详细说明一下吗?尝试将
.first()
添加到过滤器的末尾,然后
打印(email.username)
@PacketLoss它起作用了。非常感谢,太好了!我添加了这一评论作为回答。如果它有助于你自由地接受答案,那么它可能会在将来帮助他人。欢迎来到SO!