需要帮助从 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)
我有一个 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)