需要帮助从 Django 模型进行查询

Need help to make a query from django model

我有一个 CustomUser 模型,工作正常。每次保存实例时,它都会在 otp table 中存储一个值。但我想通过电子邮件发送这个预先保存的 otp 值。电子邮件功能运行良好,但我不知道如何在这里查询想要获得 otp 的特定用户。因为每个用户都会有一个随机值。

这是代码。 #models.py

class CustomUser(AbstractUser):
    username = None
    phone_regex = RegexValidator(
        regex=r'^\+?1?\d{9,14}$', message="Phone number must be entered in the form of +129999999999.")
    phone_number = models.CharField(validators=[phone_regex], max_length=17, unique=True,
                                    verbose_name='Phone Number', blank=False)
    email = models.EmailField(_('email address'), unique=True)
    isPhoneVerified = models.BooleanField(
        verbose_name='Is Phone Number Verified?', default=False)
    isEmailVerified = models.BooleanField(
        verbose_name='Is Email Verified?', default=False)
    otp = models.CharField(max_length=6)
    

    USERNAME_FIELD = 'phone_number'
    REQUIRED_FIELDS = ['email']

    objects = CustomUserManager()

    def __str__(self):
        return self.phone_number + " | " + self.email

    # Method to Put a Random OTP in the CustomerUser table to get verified for the next time after save.
    def save(self, *args, **kwargs):
        number_list = [x for x in range(10)]  # list comprehension
        code_items = []

        for i in range(6):
            num = random.choice(number_list)
            code_items.append(num)

        code_string = "".join(str(item)
                              for item in code_items)  # list comprehension again
        # A six digit random number from the list will be saved in otp table
        self.otp = code_string
        super().save(*args, **kwargs)

send_otp 函数

@receiver(post_save, sender=CustomUser)
def send_otp(sender, instance, created, **kwargs):
    if created:
        try:
            subject = "Your email needs to be verified"
            message = f'Hi, use this following OTP to Get verified your email : OTP({""})/' #here i want to put the otp table value for the user who is making the request. 

            email_from = settings.EMAIL_HOST_USER
            recipient_list = [instance.email]
            send_mail(subject, message, email_from, recipient_list)
        except Exception as e:
            print(e)

我浏览了 django 文档,但我不知道我们将如何过滤发出请求的确切用户。帮助将不胜感激。谢谢。

解决方案在您的 send_otp 函数中。 recipient_list = [instance.email] 使用与 select 编辑电子邮件相同的方法,与 select OTP 相同的方法。

正确代码:

@receiver(post_save, sender=CustomUser)
def send_otp(sender, instance, created, **kwargs):
    if created:
        try:
            subject = "Your email needs to be verified"
            message = f'Hi, use this following OTP to Get verified your email : OTP({instance.otp})/' #here i want to put the otp table value for the user who is making the request. 

            email_from = settings.EMAIL_HOST_USER
            recipient_list = [instance.email]
            send_mail(subject, message, email_from, recipient_list)
        except Exception as e:
            print(e)