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

Odoo高级视图 part2

搜索视图 search的<field>可以设置一个filter_domain属性用来覆盖原field的domain条件,其中的self代表用户的输入值。 field字段用来定义默认给出的过滤选项。 另外可以用<filter>预定义一些搜索条件的快捷方式。 domain添加过滤条件 context添加分组条件
<search string="Ideas">
    <field name="name"/>
    <field name="description" string="Name and description"
           filter_domain="['|', ('name', 'ilike', self), ('description', 'ilike', self)]"/>
    <field name="inventor_id"/>
    <field name="country_id" widget="selection"/>
    <filter name="my_ideas" string="My Ideas"
            domain="[('inventor_id', '=', uid)]"/>
    <group string="Group By">
        <filter name="group_by_inventor" string="Inventor"
                context="{'group_by': 'inventor_id'}"/>
    </group>
</search>
在action里通过search_view_id指定搜索视图 在action中还能通过在context里指定默认开启的搜索条件,使用{'search_default_field_name':1} field_name为搜索视图中filter对应的名称,1表示真值。 练习 添加 my_courses filter 过滤出我所负责的课程 ,添加负责人分组
                <search>
                    <field name="name"/>
                    <field name="description"/>
                    <filter name="my_courses" string="My Courses"
                            domain="[('responsible_id', '=', uid)]"/>
                    <group string="Group By">
                        <filter name="by_responsible" string="Responsible"
                                context="{'group_by': 'responsible_id'}"/>
                    </group>
                </search>
            </field>
        </record>
            <field name="res_model">openacademy.course</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form</field>
            <field name="context" eval="{'search_default_my_courses': 1}"/>
            <field name="help" type="html">
                <p class="oe_view_nocontent_create">Create the first course
                </p>
  甘特图 用来直观的显示进度
<gantt string="Ideas" date_start="invent_date" color="inventor_id">
    <level object="idea.idea" link="id" domain="[]">
        <field name="inventor_id"/>
    </level>
</gantt>
练习 创建hours计算字段 表示课时的持续时长小时数
class Session(models.Model):
    hours = fields.Float(string="Duration in hours",
                         compute='_get_hours', inverse='_set_hours')
    @api.depends('duration')
    def _get_hours(self):
        for r in self:
            r.hours = r.duration * 24
    def _set_hours(self):
        for r in self:
            r.duration = r.hours / 24
创建session的甘特视图
openacademy/views/openacademy.xml
            </field>
        </record>
        <record model="ir.ui.view" id="session_gantt_view">
            <field name="name">session.gantt</field>
            <field name="model">openacademy.session</field>
            <field name="arch" type="xml">
                <gantt string="Session Gantt" color="course_id"
                       date_start="start_date" date_delay="hours"
                       default_group_by='instructor_id'>
                    <field name="name"/>
                </gantt>
            </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,gantt</field>
        </record>
        <menuitem id="session_menu" name="Sessions"
date_delay 对应时长为小时
转载请注明出处
分享到: 更多 (0)

评论 0