Используя сигналы в django, пытаюсь сгенерировать код для SMS-верификации, но сгенерированный код не виден в админке. что я упускаю?
структура папки введите здесь описание изображения
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 из 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 из 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)
код см. в http://127.0.0.1:8000/admin/otp/code/ введите описание изображения здесь
код не виден.
как я могу сделать код видимым, чтобы я мог использовать его для проверки otp при входе в систему.
Заранее спасибо
На странице администратора вы увидите метод __str__
, так что, похоже, с вашим кодом все в порядке, скорее всего, значение экземпляра кода равно "", Также еще одна вещь
def __str__(self):
return str(self.number)
вам не нужно приводить его к str здесь уже есть поле char и еще одна вещь здесь:
def __str__(self):
return self.user.username
в модели Profile
вы сделали пользователя nullable, что означает, что не все экземпляры профиля могут не иметь пользователя, поэтому вы получите NoneType has no attribute username
.
измените это на следующее, чтобы предотвратить эту ошибку:
def __str__(self):
return self.user.username if self.user else ""