zoukankan      html  css  js  c++  java
  • odoo使用笔记

    原文地址:http://www.cnblogs.com/ygj0930/p/7144502.html

    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,避免自己与自己比较。

  • 相关阅读:
    假期进度报告2
    假期进度报告1
    JavaScript下判断元素是否存在
    浪潮之巅阅读笔记06
    浪潮之巅阅读笔记05
    浪潮之巅阅读笔记04
    【C语言】C语言简介
    iOS网络监测方法
    iOS常用手势识别器
    【CoreData】 简单地使用
  • 原文地址:https://www.cnblogs.com/qjtjh/p/8269586.html
Copyright © 2011-2022 走看看