如何重写Django模型save方法 实现指定CPF购买订单自动存为已批准状态
Django 模型自动批准指定CPF购买记录实现方案
核心实现方式为重写Purchases模型的save()方法,在数据写入数据库前完成CPF校验和状态自动赋值,修改后的完整模型代码如下:
class Purchases(TimeStampedModel): APROVADO = "AP" EM_VALIDACAO = "VA" # 修正原代码拼写错误:CHOICHES -> CHOICES STATUS_CHOICES = ( (APROVADO, "已批准"), (EM_VALIDACAO, "验证中"), ) # 自动批准CPF白名单,可根据业务需求调整,也可以配置到django settings中避免硬编码 AUTO_APPROVE_CPFS = {"12345678909", "98765432100"} values = models.DecimalField(decimal_places=2, max_digits=10, default=0) cpf = BRCPFField("CPF") status = models.CharField(max_length=20, choices=STATUS_CHOICES, default=EM_VALIDACAO) def save(self, *args, **kwargs): # 当CPF属于自动批准白名单时,自动设置状态为已批准 if self.cpf in self.AUTO_APPROVE_CPFS: self.status = self.APROVADO # 若需要保留手动修改的状态优先级,可替换为以下逻辑,避免覆盖用户手动调整的状态 # if self.cpf in self.AUTO_APPROVE_CPFS and self.status == self.EM_VALIDACAO: # self.status = self.APROVADO # 调用父类原生save方法完成数据持久化 super().save(*args, **kwargs)
注意事项
- 代码中
AUTO_APPROVE_CPFS为自动批准的CPF配置,你可以根据实际业务需求修改为指定的CPF值。 - 原模型代码中
STATUS_CHOICHES为拼写错误,修正后的代码已经调整为正确的STATUS_CHOICES。 - Django的批量操作方法(如
bulk_create、bulk_update)不会触发模型的save方法,如果你有批量写入购买记录的场景,需要单独处理自动批准逻辑。
内容的提问来源于stack exchange,提问作者afonso
相关产品推荐
相关产品推荐

