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