一.字段唯一(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教学视频