You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:45:05