属性"_auto = False"
决定是否创建数据库表(默认值为 True)。如果设置为 False,则需要重写 init()函数来创建表。
class HostelRoomAvailability(models.Model):
_name = 'hostel.room.availability'
_auto = False
room_id = fields.Many2one('hostel.room', 'Room', readonly=True)
student_per_room = fields.Integer(string="Student Per Rooom", readonly=True)
availability = fields.Integer(string="Availability", readonly=True)
amount = fields.Integer(string="Amount", readonly=True)
def init(self):
tools.drop_view_if_exists(self.env.cr, self._table)
query = """
CREATE OR REPLACE VIEW hostel_room_availability AS (
SELECT
min(h_room.id) as id,
h_room.id as room_id,
h_room.student_per_room as student_per_room,
h_room.availability as availability,
h_room.rent_amount as amount
FROM
hostel_room AS h_room
GROUP BY h_room.id
);
"""
self.env.cr.execute(query)
pivot透视图
属性:
type="measure" : 主要是用来统计数据的总数;
type="row" : 主要用来设置横向列;
type="col" 主要用来设置纵向列;
<record id='hostel_room_availability_action' model='ir.actions.act_window'>
<field name="name">Hostel Room Availability</field>
<field name="res_model">hostel.room.availability</field>
<field name="view_mode">pivot</field>
</record>
<record id="hostel_room_availability_view_pivot" model="ir.ui.view">
<field name="name">hostel.room.availability.pivot</field>
<field name="model">hostel.room.availability</field>
<field name="arch" type="xml">
<pivot string="Availability Analysis" disable_linking="True">
<field name="room_id" type="row"/>
<field name="student_per_room" type="measure"/>
<field name="availability" type="measure"/>
<field name="amount" type="measure"/>
</pivot>
</field>
</record>
视图继承
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.hostel</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="5"/>
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//form" position="inside">
<div class="app_settings_block" data-string="Hostel" string="Hostel" data-key="my_hostel" groups="my_hostel.group_hostel_manager">
<h2>Hostel</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box" id="hostel">
<div class="o_setting_left_pane">
<field name="group_hostel_user"/>
</div>
<div class="o_setting_right_pane">
<label for="group_hostel_user"/>
<div class="text-muted">
Allow users to hostel user
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
arch必须是xml,在这里面就可以写具体的视图了
使用xpath定位元素
注意找到的元素必须是一个,如果定位出多个元素或者是空,会报错
expr 用来选择父视图中的某个元素,如果没找到或找到多个元素会抛出一个异常
position属性
1、inside 在内部结尾插入元素
2、replace 替换元素
3、before 在之前插入元素
4、after 在其后插入元素
5、attributes 修改xml的属性