Django使用信号生成短信验证码,admin后台看不到验证码如何解决?
Django OTP验证码后台不显示问题解决方法
核心错误原因
你在Code模型的save方法中,将生成的验证码错误赋值给了不存在的mobile字段,而Code模型中存储验证码的字段是number,导致验证码没有写入数据库,后台自然无法显示。
修复步骤
1. 修正Code模型的save逻辑
修改otp/models.py文件代码如下:
from django.db import models from django.contrib.auth.models import User import random 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验证码生成逻辑 def save(self, *args, **kwargs): # 仅首次创建时生成验证码,避免后续修改数据时刷新验证码 if not self.number: code_items = [random.choice(range(10)) for _ in range(5)] code_string = "".join(str(item) for item in code_items) # 修正:将验证码赋值给正确的number字段 self.number = code_string super().save(*args, **kwargs)
2. (可选)优化Admin后台显示效果
如果需要在后台更直观查看用户和对应验证码,修改otp/admin.py:
from django.contrib import admin from .models import Code class CodeAdmin(admin.ModelAdmin): # 列表页显示的字段 list_display = ['user', 'number'] # 支持按用户名、验证码搜索 search_fields = ['user__username', 'number'] admin.site.register(Code, CodeAdmin)
3. 生效操作
- 重启Django开发服务
- 新建一个测试用户,即可在OTP的Code管理页看到生成的验证码
注意:你配置的信号仅会在新用户创建时自动生成验证码,存量的老用户需要手动创建Code实例或编写脚本批量生成。
内容的提问来源于stack exchange,提问作者Naveen
相关产品推荐
相关产品推荐

