odoo新手创建模块(五)--字段唯一

一.字段唯一(sql限制)

猫猫的名字是唯一的,猫舍也一般不会给猫猫起重名,为了防止客户手误,故写一个数据库的后台校验.

找到My_Cats_HomePage.py文件,并在添加如下代码:

	#_sql_constraints :是做数据限制的
	#通常用于唯一性限制,在odoo重启升级后,会转pg的sql限制
	
	#参数:第一个为约束名(随意起)
	#第二个是postgresql校验语句
	#第三个为报错信息
	_sql_constraints = [('name_unique', 'unique(name)', '猫猫不可重名!!!')]
	#后面代码不变,只是告知大家此代码加在了什么位置
    def adopt_action(self):
        self.borrowed = True
        self.date_last_borrowed = fields.Datetime.now()

当我们输入相同的猫猫名字时,点击保存,系统会拦截:
字段唯一
如果起约束名不贴切,想修改怎么办?请移步(唯一性标识约束改名)

此约束,我们可以在设置/技术/用户界面/模型约束中找到:
模型约束
搜索:my_cats_name_unique(模型名+约束名):
约束

二.字段唯一(数据限制)

找到My_Cats_HomePage.py文件,并在添加如下代码:

# -*- coding: utf-8 -*-

from odoo import models, fields, api
from odoo.exceptions import UserError, ValidationError
#添加方法的引用

#.....................省略代码.......................

@api.constrains('name')
#constrains:约束检查约装饰器(参数为字段)
    def check_name(self):#命名规则check(检查)+约束的字段名称
    	#如果此字段与数据的字段相同,并大于1条时执行
        if self.search_count([('name', '=', self.name)]) > 1:
        	#向界面端返回错误
            raise UserError("猫猫是不可重名的哦!!!")

当我们输入相同的猫猫名字时 ,系统会提示报错:
系统报错
想了解修饰器,请移步(小白读odoo参考手册–修饰器)

三.字段唯一总结

  • sql_constraints 是做数据限制的,通常用于唯一性限制,在odoo重启升级后,会转pg的sql限制
  • @api.constrains :是通过python代码来限制数据的,通常用于非sql数据限制,如提示某字段不规定条件,也可用于数据库数据限制。

当同一领域既出现sql限制,又出现数据限制,这个时候,先走sql,再走数据限制。当sql未通过时,自然只会显示sql,而忽略掉数据限制.

四.弹窗提示

我们在数据限制的方法中,最后返回的提示,用到了UserError

raise UserError("猫猫是不可重名的哦!!!")

弹窗提示大致有以下几种:

UserError 
RedirectWarning 
AccessDenied 
AccessError 
CacheMiss 
MissingError 
ValidationError 
DeferredException 
QWebException

摘抄自(只是一只菠萝)的文献,大家有空可以看看此位大神的odoo教学视频

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值