关注各种黑科技
B站UP主,编程教学,游戏玩家,挂B,金牛座

Odoo高级视图 part1

Tree view 可以通过一些额外的属性控制其行为 odoo8中 colors属性 语法 颜色:条件 如果条件为真,则列表行显示为前面的颜色,多个颜色条件之前用分号分割
<tree string="Idea Categories" colors="blue:state=='draft';red:state=='trashed'">
    <field name="name"/>
    <field name="state"/>
</tree>
odoo9-10中 由于使用了bootstrap主题 所以此属性发生了改变 decoration-{$name} = 值 对每条记录添加行的样式
<tree string="Idea Categories" decoration-info="state=='draft'"decoration-danger="state=='trashed'">
<field name="name"/>
<field name="state"/>
</tree>
{$name} 可以是 bf (font-weight: bold), it (font-style: italic),或 bootstrap contextual color (danger,info, muted, primary, success or warning) 值是一个python表达式 表达式可以引用到tree关联记录的字段 以及uid(当前用户 int)current_date(当前时间 格式yyyy-MM-dd字符串) editable = top或bottom 设置行内编辑功能(top从上方添加新行 bottom下方) 练习 对课时行颜色进行设置 小于5天显示为蓝色 大于15天为红色
<field name="name">session.tree</field>
            <field name="model">openacademy.session</field>
            <field name="arch" type="xml">
                <tree string="Session Tree" colors="#0000ff:duration&lt;5;red:duration&gt;15">
                    <field name="name"/>
                    <field name="course_id"/>
                    <field name="duration" invisible="1"/>
                    <field name="taken_seats" widget="progressbar"/>
                </tree>
            </field>
odoo9-10中 decoration-info="duration&lt;5" decoration-danger="duration&gt;15" 注意 这里需要html转义 更多转义代码请参考 http://tool.oschina.net/commons?type=2   日历视图 calendar view 常用的3个属性 color 关联字段值 根据此值 相同的值会分配相同的颜色 可以用color字段手动设置颜色 date_start与date_end 日历中的事件开始结束时间
<calendar string="Ideas" date_start="invent_date" color="inventor_id">
<field name="name"/>
</calendar>
其中的field标签定义了每个事件显示的标签   练习 给课时添加日历视图 添加 end_date 自动 通过start_date 和 duration自动计算而来 同时添加inverse方法 当设置end_date的值时 反向改变关联的字段的值 设置完成后,事件就可以在日历拖动了 openacademy/models.py
# -*- coding: utf-8 -*-
from datetime import timedelta
from openerp import models, fields, api, exceptions
class Session(models.Model):
    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
            # Add duration to start_date, but: Monday + 5 days = Saturday, so
            # subtract one second to get on Friday instead
            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
            # Compute the difference between dates, but: Friday - Monday = 4 days,
            # so add one day to get 5 days instead
            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
openacademy/views/openacademy.xml
            </field>
        </record>
        <!-- calendar view -->
        <record model="ir.ui.view" id="session_calendar_view">
            <field name="name">session.calendar</field>
            <field name="model">openacademy.session</field>
            <field name="arch" type="xml">
                <calendar string="Session Calendar" date_start="start_date"
                          date_stop="end_date"
                          color="instructor_id">
                    <field name="name"/>
                </calendar>
            </field>
        </record>
        <record model="ir.actions.act_window" id="session_list_action">
            <field name="name">Sessions</field>
            <field name="res_model">openacademy.session</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form,calendar</field>
        </record>
        <menuitem id="session_menu" name="Sessions"
转载请注明出处
分享到: 更多 (0)

评论 0