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

posted @ 2018-01-11 17:37  莫离莫弃iの  阅读(2745)  评论(0编辑  收藏  举报