odoo使用笔记

摘要:
它是通过ODO提供的搜索视图实现的:如果用户定义的过滤器-活动字段-为假,则将显示其活动为假的记录,单击它进行编辑,并将活动更改为真。图片的内容保存在Binary字段中,然后通过以下语句显示在视图文件中:6:Odoo中的数据保存过程创建了一个新记录。单击“保存”将记录保存到数据库中。

1:active字段为False的记录如何显示:

odoo中默认,active字段为False的记录上不显示的。但是如果在创建时没有勾选active,之后想要显示它,那就需要吧active修改为True。

然而它现在是不可见的,怎么修改?

通过odoo提供的搜索视图来实现:

自定义筛选——active字段——为假

即可把active为False的记录显示出来,点击它进行编辑,修改active为True即可。

2:添加了唯一性约束的字段,如何复制记录?

如果为模型的字段添加了唯一性约束,那么在记录的form视图功能菜单上选择“复制”时就会报错。

那么我们要在维持唯一性的前提下,保留复制功能,则只能重写模型的copy方法,在方法中为有唯一性约束的字段添加辨别性内容,使得纪录可以被成功复制(当然,新纪录中唯一性约束的字段时修改后的值,仍然唯一)

 def copy(self, default=None):
        default = dict(default or {})

       #统计数据库中已有多少个本纪录的副本
        copied_count = self.search_count(
            [('字段', '=like', u"Copy of {}%".format(self.字段))])
       #为副本中的字段值添加尾部修饰,维持唯一性
       #第一次复制:cpoy of 原字段值
        if not copied_count:
            new_字段 = u"Copy of {}".format(self.字段)
       #第n次复制:copy of 原字段值(次数)
        else:
            new_字段 = u"Copy of {} ({})".format(self.name, copied_count)
        #调用父类复制函数,并把新默认值传入
        default['字段名'] = new_字段
        return super(类名, self).copy(default)

 3:想根据某字段不同值而进行不同显示,但有不需要显示该字段值,怎么办?

视图标签中包含这个field(包含这个字段才可以使用该字段),但其invisible属性设置为1,即:该字段不可见。

 <field name="字段" invisible="1"/>

4:逆运算

当通过compute属性指定方法,根据依赖值计算得到当前字段值时。一般也要制定这个计算的逆运算——根据当前字段值,改变依赖值。

比如:开始日期+持续时间=结束日期,我们有这个可以得到结束日期。

如果用户指定了开始日期和结束日期,那么持续时间=介绍日期-开始日期,实现这个逻辑的方法就是inverse属性值指向的方法。

   #定义结束日期字段,结束日期由开始+持续,而设置结束日期,则需要自行计算出持续日期
    end_date = fields.Date(string="End Date", store=True,
                           compute='_get_end_date', inverse='_set_end_date')
    #"获取结束日期"事件的响应函数:计算出结束日期
    @api.depends('start_date', 'duration')
    def _get_end_date(self):
        for r in self:
            if not (r.start_date and r.duration):
                r.end_date = r.start_date
                continue
            start = fields.Datetime.from_string(r.start_date)
            duration = timedelta(days=r.duration, seconds=-1)
            r.end_date = start + duration

    #"设置结束日期"事件的响应函数:计算并设置持续时间
    def _set_end_date(self):
        for r in self:
            if not (r.start_date and r.end_date):
                continue
            start_date = fields.Datetime.from_string(r.start_date)
            end_date = fields.Datetime.from_string(r.end_date)
            r.duration = (end_date - start_date).days + 1

5:odoo图片显示

odoo没有专门的图片标签,但是可以通过widget来控制field标签来显示图片内容。

图片的内容保存在Binary类型的字段中,然后在视图文件中通过以下语句显示出来:

<field name="Img字段" widget="image" class="oe_avatar oe_left"/>

6:Odoo中数据保存的流程

在新建一条记录,点击“保存”按钮后,会把该条记录保存到数据库中。

有时候,我们会对模型记录进行约束,比如:与其他记录比较某字段值,不能相同或者范围重叠等。

此时,会遇到一个问题:新增记录会与自己进行比较。

很多人对约束的理解为:新建一条记录,点击“保存”时进行约束检查,如果不符合要求则抛出异常,记录生成失败。

然而,真正的流程应该是:内存中生成了模型记录——尝试插入表——约束检查——检测到异常,插入失败。

约束,是在记录生成之后,插入数据表之前进行的判断,约束不能阻止记录的生成。我们可以在代码中,通过环境上下文访问到新生成的记录!

因此,如果在约束函数中将新记录与数据库中查找记录进行比较时,切记要增加一个判断条件:新记录id!=数据库中记录id,避免自己与自己比较。

免责声明:文章转载自《odoo使用笔记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SVG DOM常用属性和方法介绍linux源码“.config”文件分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

图书管理系统后端接口

1.图书管理系统后端接口1.1 books/models.py 中设置表 from django.db import models class Books(models.Model): btitle = models.CharField(max_length= 20 ) bpub_date = models.DateField()...

定时任务应该这么玩

1.场景 在电商系统中会经常遇到这样一种场景,就是商品的定时上下架功能,总不能每次都手动执行吧,这个时候我们首先想到的就是利用定时任务来实现这个功能。 目前实现定时任务主要有以下几种方式: JDK自带 :JDK自带的Timer以及JDK1.5+ 新增的ScheduledExecutorService; 第三方框架 :使用 Quartz、elastic-j...

sqlserver 使用脚本创建作业

--【作业常用的几个步骤】   EXEC msdb.dbo.sp_delete_job   EXEC msdb.dbo.sp_add_job   EXEC msdb.dbo.sp_add_jobstep   EXEC msdb..sp_add_jobschedule   EXEC msdb.dbo.sp_add_jobserver    EXEC msd...

Oracle 内置函数

SQL中的单记录函数 1.ASCII返回与指定的字符对应的十进制数;SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual; A A ZERO SPACE--------- --------- --------- ---------65 97 4...

ubuntu 18.04, 编译运行ORB_SLAM3, 遇到错误Pangolin X11: Unable to retrieve framebuffer options。

当前问题 遇到错误Pangolin X11: Unable to retrieve framebuffer options。操作系统是ubuntu 18.04,物理机,不是虚拟机. 按报错Pangolin X11: Unable to retrieve framebuffer options ,修改components/pango_windowing/sr...

MySql与Java的时间类型

MySql与Java的时间类型 MySql的时间类型有Java中与之对应的时间类型datejava.sql.Date Datetimejava.sql.Timestamp Timestampjava.sql.Timestamp Timejava.sql.Time Yearjava.sql.Date 对其进行分析参考MySql 的reference ma...