Home > Blockchain >  Using signals in django, trying to generate code for SMS verification but generated code is not visi
Using signals in django, trying to generate code for SMS verification but generated code is not visi

Time:11-07

folder structure enter image description here

models.py from face_detect

from django.db import models
from django.contrib.auth.models import User


# Create your models here.
class Profile(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE,null=True)
    mobile = models.CharField(max_length=10,null=True)
    add = models.CharField(max_length=10,null=True)
    image = models.FileField(null=True)

    def __str__(self):
        return self.user.username

models.py from otp

from django.db import models
from django.contrib.auth.models import User
from face_detect.models import Profile
import random
# Create your models here.

class Code(models.Model):
    number = models.CharField(max_length=5, blank=True)
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    def __str__(self):
        return str(self.number)

    #otp verification
    def save(self, *args, **kwargs):
        number_list = [x for x in range(10)]
        code_items = []

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

        code_string = "".join(str(item) for item in code_items)
        self.mobile = code_string

        super().save(*args,**kwargs)

signals.py from otp

from face_detect.models import Profile
from django.contrib.auth.models import User
from .models import Code
from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=User)
def post_save_generate_code(sender, instance, created, *args, **kwargs):
    if created:
        Code.objects.create(user=instance)

apps.py from otp

from django.apps import AppConfig


class OtpConfig(AppConfig):
    name = 'otp'

    def ready(self):
        import otp.signals

init.py from otp

default_app_config = 'otp.apps.OtpConfig'

admin.py from otp

from django.contrib import admin
from .models import Code
# Register your models here.
admin.site.register(Code)

code seen in http://127.0.0.1:8000/admin/otp/code/ enter image description here

code is not visible.

how can i make the code visible so i can use it for otp verification while login.

Thanks in advance

CodePudding user response:

In admin page you will see the __str__ method, so there seems to be nothing wrong with your code most probably your code instance's value is "", Also one other thing

def __str__(self):
    return str(self.number)

you dont need to cast it to str here its already char field and another thing is here:

   def __str__(self):
        return self.user.username

in Profile model you made user nullable so this means not all the profile instances might not have user so you will get NoneType has no attribute username change it to this to prevent this errors:

def __str__(self):
        return self.user.username if self.user else ""
  • Related