Django如何显示表单提交值且不入库待管理员审核后再存储
Django 品牌注册审核功能实现方案
方案1:现有模型扩展审核字段(实现成本最低)
直接在你现有的BrandRegister模型中新增审核状态相关字段即可,无需额外建表:
from django.db import models class BrandRegister(models.Model): # 原有字段保持不变 brand_name = models.CharField(max_length=50) owner_name = models.CharField(max_length=30) address = models.CharField(max_length=30) contact_no = models.BigIntegerField() # 新增审核配置 REVIEW_STATUS = ( ('pending', '待审核'), ('approved', '已通过'), ('rejected', '已驳回'), ) review_status = models.CharField(max_length=10, choices=REVIEW_STATUS, default='pending') submit_time = models.DateTimeField(auto_now_add=True) # 可按需新增驳回理由、审核时间等扩展字段
业务逻辑实现:
- 用户提交注册表单后,直接写入该表,
review_status默认标记为待审核状态 - 所有正常业务场景查询正式生效的品牌数据时,统一增加过滤条件
BrandRegister.objects.filter(review_status='approved'),待审核数据不会被正常业务读取,相当于未正式入库 - 管理员审核时只需修改对应记录的
review_status值即可,审核通过改为approved后数据正式生效,驳回则改为rejected - 如果用Django自带的Admin后台,可以直接给该模型注册批量审核的action,无需额外开发复杂的审核页面就能满足需求
- 用户提交后需要展示的提交内容,直接读取该条待审核记录的字段值返回前端渲染即可
方案2:单独建待审核中间表(数据隔离更彻底)
如果需要完全隔离待审核数据和正式生效数据,可以单独新增一个待审核中间表:
from django.db import models # 原有正式品牌表不变 class BrandRegister(models.Model): brand_name = models.CharField(max_length=50) owner_name = models.CharField(max_length=30) address = models.CharField(max_length=30) contact_no = models.BigIntegerField() # 新增待审核中间表,字段和正式表保持一致即可 class BrandRegisterPending(models.Model): brand_name = models.CharField(max_length=50) owner_name = models.CharField(max_length=30) address = models.CharField(max_length=30) contact_no = models.BigIntegerField() submit_time = models.DateTimeField(auto_now_add=True)
业务逻辑实现:
- 用户提交表单后,数据先写入
BrandRegisterPending中间表,正式品牌表不会产生任何记录 - 管理员审核通过后,将中间表对应记录的字段值复制写入正式的
BrandRegister表,再删除中间表的对应记录即可 - 审核驳回直接删除中间表记录,或新增驳回理由字段留存记录即可
- 用户提交后的内容展示,直接读取中间表对应的记录返回前端即可
内容的提问来源于stack exchange,提问作者smith
相关产品推荐
相关产品推荐

