“字段'id'应该有一个数字,但收到的是'ashutoshmishra333@gmail.com'。”,

时间:2020-02-21 06:15:33

标签: django

通过邮递员发帖时出现错误

“字段'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

1 个答案:

答案 0 :(得分:1)

模型 Otp 中的

字段电子邮件引用模型 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 模型中具有电子邮件字段。