首页 > 其他分享 >Django在模型表中添加手动校验的方式

Django在模型表中添加手动校验的方式

时间:2024-12-23 14:31:48浏览次数:3  
标签:name models self 校验 Django 表中 delete 书名 verbose

下面的示例主要运用于代码层面的去重处理,不在数据库层面增加唯一键

# 导入依赖
from django.db import models
from django.utils.translation import gettext_lazy as _
from rest_framework.exceptions import APIException
from django.contrib.auth import get_user_model

User = get_user_model()

# 以书名为例
class Book(models.Model):
    author = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        related_name='books',
        verbose_name=_('作者')
    )
    name = models.CharField(null=True, blank=True, max_length=255, verbose_name=_('书名'))
    public_time = models.DateField(null=True, blank=True, verbose_name=_('发行时间'))
    is_delete = models.BooleanField(default=False, verbose_name=_('是否删除'))

    def __str__(self):
        return f'{self.name} - {self.author.name} - {self.public_time}'

    def clean(self):
        if not self.is_delete:
            # 检查是否已有相同的书名、作者 且 is_delete=False 的记录
            if VersionReviewPlan.objects.filter(
                    author=self.author,
                    name=self.name,
                    public_time=self.public_time,
                    is_delete=False
            ).exclude(pk=self.pk).exists():
                raise APIException('请检查是否存在相同的书名')

    def save(self, *args, **kwargs):
        self.clean()
        super().save(*args, **kwargs)

    class Meta:
        verbose_name = _('书名')
        verbose_name_plural = _('书名')

标签:name,models,self,校验,Django,表中,delete,书名,verbose
From: https://www.cnblogs.com/wellplayed/p/18623894

相关文章

  • 防止Django信号互相干扰的方式
    如果书写了多个信号,可能会出现互相干扰的情况。为了防止这种情况的发生,我们可以手动控制信号的断开与连接。#导入依赖fromdjango.db.models.signalsimportpost_savefromdjango.dispatchimportreceiverdefdisconnect_signals():post_save.disconnect(信号1,se......
  • Django 模型管理器中自定义方法和添加导出功能
    在Django中,模型管理器提供了一种扩展模型行为的方式。您可以重写或添加自定义方法,以满足特定的业务需求。在本文中,我们将探讨如何在模型管理器中自定义方法,并提供一些常见的用例。此外,我们还将介绍如何在管理员界面中添加导出数据为CSV文件的功能。什么是模型管理......
  • 基于python实现用户注册与校验
    实现用户注册与校验common—源码"""一、基础功能需求1. 综合使用当前所学知识,如列表、字典、字符串、函数等,实现一个基于命令行的用户注册功能。2. 用户注册时必须要输入用户名、密码、手机号码,用针对用户的输入必须进行验证。3. 用户名的规则:只能是大小写字母或数字......
  • 两两交换链表中的节点(迭代)
    给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即只能进行节点交换)。 示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1] /***Definitionforsing......
  • Django基础 - 01入门简介
    一、基本概念1.1Django说明Django发布于2005年,网络框架,用Python编写的开源的Web应用框架。采用了MVC框架模式,也称为MTV模式。官网:https://www.djangoproject.com1.2MVC框架Model:封装和数据库相关的业务逻辑View:视图,用来呈现数据Controller:......
  • 【数据库开发】小红书MySQL数据一致性校验能力探索与实践
    本文主要介绍数据一致性校验如何结合小红书的业务进行实践并落地,以及数据一致性校验在小红书内部拿到的实际收益。一、背景1.1什么是数据一致性校验在数据迁移、数据同步以及多数据中心部署等场景中,数据的一致性要求极为严格。然而冗长的同步计算链路产生的误写或丢失、主从复......
  • PbootCMS中如何确保置顶文章在列表中优先显示?
    在PbootCMS中,确保置顶文章在列表中优先显示通常通过在模板中正确使用istop标签和排序规则来实现。如果发现置顶文章没有优先显示,可以按照以下步骤进行排查和解决:后台设置置顶:登录PbootCMS后台管理系统。导航到“内容管理”->“文章管理”。找到你想要置顶的文章,点击编辑......
  • 基于 Django和Python 的影视数据可视化系统
    文章目录程序资料获取一、项目技术二、项目内容和项目介绍三、核心代码四、效果图五、资料获取程序资料获取......
  • django基于Python的校园个人闲置物品换购平台
    文章目录程序资料获取一、项目技术二、项目内容和项目介绍三、核心代码四、效果图五、资料获取程序资料获取......
  • 计算机毕设项目96xeny5v+python基于python+django的医疗预约与诊断系统,计算机毕业生可
    python基于python+django的医疗预约与诊断系统摘要随着医疗资源的日益紧张,医疗预约与诊断系统的出现成为解决这一问题的关键。该系统旨在提高医疗服务效率,减少患者等待时间,使医疗资源得到更合理的分配。系统利用先进的信息技术,实现了患者在线预约、医生诊断、检查结果的实......