【发布时间】:2021-04-23 06:52:43
【问题描述】:
我正在尝试根据电子邮件地址检查数据库中是否存在用户,因此我收到了电子邮件,如果该电子邮件存在,我想返回该用户的用户名以及其他一些数据。
我正在使用 objects.get() 方法来执行此操作,但我不断收到此错误。
对其进行了一些搜索,一些解决方案建议进行过滤并返回 .first() 对象或代替 email=email,建议放置 email=email[0],但这两种方法都结束了给我一个空数组作为回应。
这是我的 Views.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})
【问题讨论】:
-
你为什么要对
Account进行两次查询?您的过滤器是否返回结果?如果是这样,您可以使用email下的QuerySet -
@PacketLoss 如果电子邮件存在,则第一个查询返回,第二个查询旨在返回现有用户的用户名,但会抛出该错误。并且过滤器返回结果是的。但我不知道如何使用电子邮件下的查询集来获取用户名。能详细点吗?
-
尝试将
.first()添加到过滤器的末尾,然后添加print(email.username) -
@PacketLoss 成功了。太感谢你了????
-
太棒了!我已添加评论作为答案。如果它有助于随时接受答案,那么它可能会在未来帮助其他人。欢迎来到 SO!
标签: python django django-rest-framework django-views