通过邮递员发帖时出现错误
“字段'id'需要一个数字,但收到了'********* 333@gmail.com'。”,
class PasswordViewSet(viewsets.ViewSet):
def create(self, request):
try:
email = request.data.get('email')
password = request.data.get('password')
otp = request.data.get('otp')
#user_obj = MyUser.objects.filter(email=email)
otp_obj_check = Otp.objects.filter(email=email)
user_obj=MyUser.objects.get(email=email)
if not user_obj:
raise Exception("email does not exist")
if otp_obj_check:
otp_obj = Otp.objects.filter(email=email).order_by('-id')[0]
else:
raise Exception("invalid otp")
if not otp:
raise Exception("please enter otp")
if int(otp_obj.otp) == int(otp):
for user_obj in user_obj:
user_obj.set_password(password)
user_obj.save()
# token = get_access_token(user_obj)
else:
raise Exception('wrong otp')
if not password:
raise Exception('please enter password')
return Response({"password": 'updated', "success": True}, status=status.HTTP_200_OK)
except Exception as error:
traceback.print_exc()
return Response({"message": str(error), "success": False}, status=status.HTTP_200_OK)
class Otp(models.Model):
email=models.ForeignKey(MyUser,on_delete=models.CASCADE)
otp=models.CharField(max_length=10,null=True,blank=True)
def __str__(self):
return self.otp
答案 0 :(得分:1)
字段电子邮件引用模型 MyUser 。 Myuser 的主键字段是 id (它是整数)。
所以
otp_obj_check = Otp.objects.filter(email = email)不会通过 email 字段进行过滤,而是通过Myuser的 id 字段进行过滤。
要使用 Myuser 的 email 进行过滤,请更改第8行和第13行,如下所示:
otp_obj_check = Otp.objects.filter(email__email=email)
和
otp_obj = Otp.objects.filter(email__email=email).order_by('-id')[0]
电子邮件和电子邮件之间的重要双下划线
它基于 Myuser 的电子邮件进行过滤。
我希望您在 Myuser 模型中具有电子邮件字段。