Используя сигналы в 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 ""