Displaying a full list of groups in Odoo's Kanban view
Kanban view is probably the most flexible view in Odoo. It can be used for many different purposes. One of the most common ones is splitting items into distinct groups (represented by a row of columns) and allowing users to drag items between those groups. For example the hr_reqruitment
module lets users to manage applications this way.
It’s trivial and well documented how to group objects in Kanban. Just adddefault_group_by
attribute to the <kanban>
element:
<kanban default_group_by="company_id">
Including empty groups
There is however a potential problem.Columns representing groups without any items will not be included. This means users won’t be able to move items to those absent groups, which is probably not what we intended.
Oddo has an answer for this ready - an optional model attribute called _group_by_full
. It should be a dictionary, mapping field names (of the fields you use for grouping) to methods returning information about all available groups for those fields.
class Store(models.Model):
@api.model
def company_groups(self, present_ids, domain, **kwargs):
companies = self.env['res.company'].search([]).name_get()
return companies, None
_name = 'store'
_group_by_full = {
'company_id': company_groups,
}
name = fields.Char()
company_id = fields.Many2many('res.company')
The code above ensures that when displaying store
objects grouped by company_id
, all available companies will be represented (and not only those already having stores).
Methods listed in _group_by_full
need to return a two element tuple:
First element: a list of two element tuples, representing individual groups. Every tuple in the list need to include the particular group’s value (in our example: id of a particular company) and a user friendly name for the group (in our example: company’s name). That’s why we can use the
name_get
method, since it returns a list of(object id, object name)
tuples.Second element: a dictionary mapping groups’ values to a boolean value, indicating whether the group should be folded in Kanban view. Not including a group in this dictionary has the same meaning as mapping it to
False
.For example this version of
company_groups
method would make group representing a company with id1
folded in Kanban view:
@api.model
def company_groups(self, present_ids, domain, **kwargs):
companies = self.env['res.company'].search([]).name_get()
folded = {1: True}
return companies, folded
Grouping by fields other than many2one
There seem to be problem in Odoo 8.0 preventing use of _group_by_full
with fields other than many2one
. I got around the issue extending the _read_group_fill_results
method. Here is an example of grouping by the state
field:
class Store(models.Model):
_name = 'store'
STATES = [
('good', 'Good Store'),
('bad', 'Bad Store'),
('ugly', 'Ugly Store'),
]
# States that should be folded in Kanban view
# used by the `state_groups` method
FOLDED_STATES = [
'ugly',
]
@api.model
def state_groups(self, present_ids, domain, **kwargs):
folded = {key: (key in self.FOLDED_STATES) for key, _ in self.STATES}
# Need to copy self.STATES list before returning it,
# because odoo modifies the list it gets,
# emptying it in the process. Bad odoo!
return self.STATES[:], folded
_group_by_full = {
'state': state_groups
}
name = fields.Char()
state = fields.Selection(STATES, default='good')
def _read_group_fill_results(self, cr, uid, domain, groupby,
remaining_groupbys, aggregated_fields,
count_field, read_group_result,
read_group_order=None, context=None):
"""
The method seems to support grouping using m2o fields only,
while we want to group by a simple status field.
Hence the code below - it replaces simple status values
with (value, name) tuples.
"""
if groupby == 'state':
STATES_DICT = dict(self.STATES)
for result in read_group_result:
state = result['state']
result['state'] = (state, STATES_DICT.get(state))
return super(Store, self)._read_group_fill_results(
cr, uid, domain, groupby, remaining_groupbys, aggregated_fields,
count_field, read_group_result, read_group_order, context
)
Displaying a full list of groups in Odoo's Kanban view的更多相关文章
- odoo 基于SQL View视图的model类
在做odoo的过程中,会涉及到多表的查询, 尤其是做报表的时候这种情况更甚,这样下来会做很多的关联,不是很方便.odoo提供了一种机制,即基于视图的model类.代码地址在这里. 具体过程如下: 1. ...
- odoo 开发基础 -- 视图之xpath语法
odoo 视图函数 在整个项目文件中,结构并不是十分明显,虽然它也遵循MVC设计,类比django的MTV模式,各个模块区分的十分明显,在Odoo中,视图的概念不是特别明显,很多时候,我们会将调用模型 ...
- ODOO里视图开发案例---定义一个像tree、form一样的视图
odoo里视图模型MVC模式: 例子:在原来的视图上修改他: var CustomRenderer = KanbanRenderer.extend({ ....});var CustomRendere ...
- (04)odoo视图操作
-----------------更新时间19:04 2016-09-29 星期四11:17 2016-09-18 星期日18:13 2016-04-05 星期二15:05 2016-03-14 星期 ...
- odoo打包下载
view 视图中下载按钮的编辑 <record id="action_download_zip" model="ir.actions.server"> ...
- odoo看板笔记
案例0001 odoo中看板使用 #其中一定要many2one阶段字段名称 stage_id <kanban default_group_by="stage_id"> ...
- 【odoo14】第十五章、网站客户端开发
odoo的web客户端.后台是员工经常使用的地方.在第九章中,我们了解了如何使用后台提供的各种可能性.本章,我们将了解如何扩展这种可能性.其中web模块包含了我们在使用odoo中的各种交互行为. 本章 ...
- Pyhton开源框架(加强版)
info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...
- Python开源框架
info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...
随机推荐
- ZEALER背后的乐视云视频
ZEALER是我非常喜欢的一个测评网站,经常访问看看手机.电动牙刷及机械键盘的测试视频,非常欣赏王自如的数据化测评理念.敬畏之心,以及不祛痘的视频. 刚好最近对网络视频应用比较感兴趣,觉得ZEALER ...
- CSS实现打字效果
.print{ width:250px; white-space:nowrap; overflow:hidden; -webkit-animation: dy 3s steps(60, end) in ...
- SQLServer 维护脚本分享(06)CPU
--CPU相关视图 SELECT * FROM sys.dm_os_sys_info SELECT * FROM sys.dm_exec_sessions SELECT * FROM sys.sysp ...
- 【bootstrapValidator 不验证】使用bootstrapValidator 验证效果不起作用
虽然在页面ready的时候 就绑定了验证表单 ,但是在点击提交按钮之后 依旧没有验证的效果 . 那就在提交按钮的点击事件中 添加一句话: $(document).ready( function () ...
- MVC LINQ to SQL: Basic Concepts and Features
http://www.codeproject.com/Articles/215712/LINQ-to-SQL-Basic-Concepts-and-Features
- 分享Kali Linux 2016.2第47周虚拟机
分享Kali Linux 2016.2第47周虚拟机该虚拟机使用Kali Linux 2016.2第47周的64位镜像安装而成.基本设置如下:(1)该系统默认设置单CPU双核,内存为2GB,硬盘为50 ...
- 转:ExpressBars中的停靠控件使用
http://www.cnblogs.com/jxsoft/archive/2011/08/25/2152872.html 1 新手上路 1.1 控件简介 Dock pan ...
- unity update 和fixedudpate
但是Update会在每次渲 染新的一帧时被调用. 而FixedUpdate会在每个固定的时间间隔被调用,
- Codeforces Round #251 (Div. 2) C. Devu and Partitioning of the Array
注意p的边界情况,p为0,或者 p为k 奇数+偶数 = 奇数 奇数+奇数 = 偶数 #include <iostream> #include <vector> #include ...
- 关于NSNotificationCenter消息通信用法
NSNotificationCenter主要用于广播消息到多个监听着,其传统用法 - (void)viewDidLoad { [super viewDidLoad]; [[NSNotification ...