Odoo看板视图实践案例

news/发布时间2024/5/17 0:46:04

看板视图是一个很常见的可视化解决方案了,例如:联系人卡片,任务卡片,还有二次元朋友们经常逛的哔站。

我个人也是非常喜欢看板视图,比起那些呆板的tree视图,看板视图给人的感觉的就是简洁直观又好看。

本人也是初学Odoo一个月,其中深意只知其一,但也想跟各位大佬分享交流,于是斗胆以拙见一篇讨教一二,文中不对之处,还望指正,深表感谢。

啰嗦废话,到此为止。

Odoo的看板视图可谓是相当灵活了,但是设计起来也比较复杂,这里我用了‘’比较‘’,可以想想,在表单视图中,我们大部分时候使用的是Odoo独有的XML元素,,比如<field>和<group>,有时也会用到,html元素,如<div>和<label>,但是在看板试图则恰恰相反,展示模板基于HTML,仅支持两个Odoo独有的元素:<field>和<button>。最终呈现在网页客户端的内容是QWeb模板动态生成的。

这里附上一个简单的看板模板,布局大多如此,稍作修改即可变换各种看板样式。

 

<!--add kanban view-->
<record id="comics_kanban" model="ir.ui.view"><field name="model">comics</field><field name="arch" type="xml"><kanban><!-- Fields to use in expressions --><field name="value1"/><!--...add other used fields--><templates><t t-name="kanban-box"><!--HTML QWeb template--><!--set the kanban color--><div t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click"><div class="o_dropdown_kanban dropdown"><!--top-right drop down menu here--></div><div class="oe_kanban_body"><!-- Content elements and fields go here... --></div><div class="oe_kanban_footer"><div><!-- Left hand footer.. --></div><div><!-- Right hand footer...--></div></div><div class="oe_clear"/></div></t></templates></kanban></field>
</record>

  

以下将介绍一则odoo看板视图的实践案例,最终成果类似视频管理看板。

我将尽可能描述的详细,以便您也可以很容易复现。

 

首先,描述一下案例环境。

我用的是windows 10 系统,本地pgsql 13,python 3.7,pycharm社区版。

不论什么环境,我想效果应该是一样的。

在github拉取odoo14项目。

假设你已经创建好数据库用户和测试用的数据库了,你也知道直接用postgres用户是不允许的。

那么,以防您没有创建好数据库用户和测试用的数据库,也能理解您懒,懒得去查一下,体贴如我,直接附下代码一份,仅供参考。

create user odoo14 with password 'odoo14';
alter role odoo14 with superuser;
create database test1 owner odoo14;
grant all privileges on database test1 to odoo14;

  

接下来是简单枯燥的配置文件,创建模块的环节了。

  1. 创建虚拟环境
  2. 创建odoo.conf
  3. 指定odoo-bin
  4. 配置启动参数-c odoo.conf
  5. 下载依赖 pip3 install -r requirements.txt -i 
  6. 创建文件my_addons,创建模块 python ./odoo-bin scaffold comics my_addons
  7. 启动项目,刷新,安装

然后开始code,内容略显简单,小试牛刀,笔者惭愧,读者勿怪。
1. 编辑模型 comics.py

# -*- coding: utf-8 -*-from odoo import models, fieldsclass comics(models.Model):_name = 'comics.comics'_description = 'comics.comics'name = fields.Char(string='动漫标题')total = fields.Integer(string='总集数')score = fields.Float(string='评分')release_date = fields.Date(string='上映时间', default=fields.Date.today())current = fields.Integer(string='当前剧集')cover_image = fields.Binary(string='封面图片', attachment=True)

  

2. 编辑菜单 menu.xml

<odoo><act_windowid="act_comics_view"name="comics"res_model="comics.comics"view_mode="tree,kanban,form"/><menuitemid="menu_comics_view"name="comics"action="act_comics_view"groups="base.group_user"/>
</odoo>

  

3. 编辑视图 view.xml

 
 
<odoo><data><record model="ir.ui.view" id="view_comics_comics_form"><field name="name">comics.form</field><field name="model">comics.comics</field><field name="arch" type="xml"><form><sheet><group><field name="name"/><field name="cover_image" widget="image"/><field name="score"/></group><group><field name="current"/><field name="total"/><field name="release_date"/></group></sheet></form></field></record><record model="ir.ui.view" id="view_comics_comics_search"><field name="name">comics.search</field><field name="model">comics.comics</field><field name="arch" type="xml"><search><field name="name"/></search></field></record><record model="ir.ui.view" id="view_comics_comics_kanban"><field name="name">comics.kanban</field><field name="model">comics.comics</field><field name="arch" type="xml"><kanban><field name="id"/><field name="name"/><field name="release_date"/><field name="current"/><field name="total"/><templates><t t-name="kanban-box"><div class="oe_kanban_card" style="height: 150px; width: 300px;"><div class="o_kanban_image" style="width:60%;height:100%;"><img alt="comics" style="width:100%;height:100%;"t-att-src="kanban_image('comics.comics', 'cover_image', record.id.raw_value)"/></div><div class="oe_kanban_content"><div class="o_kanban_record_title"><field name="name" class="o_text_overflow"/></div><div class="o_kanban_record_bottom"><span class="oe_kanban_bottom_right"><field name="release_date"/></span></div><div class="o_kanban_record_bottom" style="height: 40px"> </div><div class="o_kanban_record_bottom"><span class="oe_kanban_bottom_right">当前更新到<field name="current"/>集</span></div><div class="o_kanban_record_bottom"><span class="oe_kanban_bottom_right">总共<field name="total"/>集</span></div></div></div></t></templates></kanban></field></record></data>
</odoo>

  

4. 最后别忘了__manifest__.py,添加你刚才写的xml文件。
code完毕,来看效果。
在页面上添加三条记录,我比较喜欢鬼灭之刃。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/58222266.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

在线问诊 Python、FastAPI、Neo4j — 创建 饮食节点

目录饮食数据创建节点 根据疾病、症状,判断出哪些饮食不能吃,哪些建议多吃 饮食数据 foods_data.csv 建议值用“”引起来。避免中间有,号造成误识别 饮食 "辣椒" "大蒜" "芥末" "海鲜" "胡萝卜" "核桃仁" &quo…

面试问题之如何解释微服务

这次的面试还是感觉非常愉快,没有那么憋屈,问的问题也非常有意思。 问题 假设现在有一个人完全不懂微服务,你能和对方解释下什么是微服务吗?面试回答 这个问题如果要完全回答好,感觉不是那么容易。 什么是微服务 很多人都知道现代的开发流程多是前后端分离,后端采用部署服…

Java 8 和 11 开始提供的新特性面试

说下 Lambda function Lambda 是 JDK 8 以后的版本才提供的功能。 在 JDK 8 之前是没有的。 Java Lambda表达式 的一个重要用法是简化某些匿名内部类 (Anonymous Classes )的写法。实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过invokedynamic 指令来实现La…

Java 消息策略的实现 - Kafak 是怎么设计的

这个也是开放讨论题,主要讨论下 Kafka 在消息中是如何进行实现的。总结 这个题目的开发性太强了。 Kafka 可以用的地方非常多,我经历过的项目有 Kafka 用在消息处理策略上的。这个主要是 IoT 项目,因为这个项目需要对温度传感器采集获得数据。 当我们有多个数据采集点的时候…

巨杉数据库入选2023信创企业排行榜

在信创数据库领域的丰富技术积累和领先的行业实践能力,入选2023信创数据库企业排行榜,这是对巨杉数据库在分布式数据库领域自研道路的充分肯定。 近期,由中科院旗下的互联网周刊、德本咨询和eNet研究院共同发布了《2023信创数据库企业排行榜》。在经过全面多维的严格评估后,…

Docker Desktop 界面功能介绍,添加国内镜像源

默认情况下,Docker Desktop会从Docker Hub下载镜像,但在国内由于网络的原因,下载速度可能较慢,配置国内镜像源可以提速镜像下载。在Docker Desktop中配置镜像源非常简单,点击1、2后,在3处粘贴如下内容,重启生效。 镜像源修改设置 默认情况下,Docker Desktop会从Docker…