九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Odoo10學習筆記三:模型(結構化的應用數(shù)據(jù))、視圖(用戶界面設計)

一:模型

【Odoo中,一切皆模型,連視圖都是模型。Odoo將各種數(shù)據(jù),如:權限數(shù)據(jù)、類數(shù)據(jù)、視圖數(shù)據(jù)等,按照模型分表存儲,然后在查看時,按照索引從各個表格讀取信息,組合成我們看到的內容。】

1:創(chuàng)建模型

模型屬性:模型類可以使用一些屬性來控制它們的一些行為:

_name :創(chuàng)建odoo模型的內部標識符,必含項。

_description :當用戶界面顯示模型時,一個方便用戶的模型記錄標題。

_order :當瀏覽模型記錄或者顯示在列表視圖時,設置默認順序。

_rec_name:用來指出引用關聯(lián)字描述記錄的字段,例如多對一關系。 默認情況下,它使用name字段,這是模型中常見的字段。但是這個屬性允許我們使用任何其他字段來實現(xiàn)這個目的。

_table:用來支持模型的數(shù)據(jù)庫表名。通常,它是左自動計算,是下劃線取代點的模型名稱,但也可以設置特定的表名。

_inherit :繼承。

_inherits :嵌入式繼承。

模型深入:

Odoo模型由Python類表示。

Odoo模型被保存在一個中央注冊中心,它可以引用實例中可用的所有模型類,并且它可以被一個模型名引用。在我們編寫的模型方法代碼中,可以通過 self.env['x'] 獲取一個代表model x的類的引用。(相當于spring托管對象)

模型名稱很重要,因為它們是用于訪問注冊中心的。模型名稱的約定規(guī)則:用點分隔的小寫字母列表。

模型名稱必須是全局唯一的。正因為如此,第一個詞應該對應于該模塊涉及到的主要應用程序。
瞬態(tài)和抽象模型:

絕大多數(shù)Odoo模型中,類都是基于models.Model類的。 這種類型的模型具有永久的數(shù)據(jù)庫持久性:為它們創(chuàng)建數(shù)據(jù)庫表,并且它們的記錄被存儲,直到被顯式刪除。

Odoo還提供了另外兩種模型類型:瞬態(tài)模型和抽象模型。

瞬態(tài)模型基于models.TransientModel類,用于向導式的用戶交互。 它們的數(shù)據(jù)仍然存儲在數(shù)據(jù)庫中,但期望是臨時的。 一個清理作業(yè)定期從這些表中清除舊數(shù)據(jù)。?
抽象模型基于models.AbstractModel類,并且它不存儲數(shù)據(jù)。 抽象模型作為可重用的功能集,利用Odoo的繼承功能,混入到其他模型。


2:模型之間的關系

命名字段時,有以下約定:以_id、_ids為結尾命名的字段,分別對應的是2one和2many的關系。

多對一關系:Many2one關系需要兩個參數(shù):關聯(lián)模塊和展示字符。它會在數(shù)據(jù)庫表中創(chuàng)建一個擁有外鍵的字段去關聯(lián)數(shù)據(jù)庫表。其他參數(shù):
ondelete 在關聯(lián)的記錄被刪除時,將會觸發(fā)。默認值是null,也就是說,當關聯(lián)的記錄被刪除時,它將被置空。其它值為restrict,當記錄被關聯(lián)時,禁止刪除,cascade,刪除關聯(lián)記錄的同時刪除當前記錄。
context是一個數(shù)據(jù)字典,在web客戶端視圖,通過關聯(lián)關系訪問時,會將上下文傳過去。比如,設置默認值。它的詳細的介紹,在第六章-視圖-設計用戶界面中。
domain是一個由多個元組組成的列表的域表達式,用來刪選關聯(lián)字段中有效的記錄。
auto_join=True使用這個參數(shù)后,將允許ORM在數(shù)據(jù)查詢是使用SQL的join(拼接,級聯(lián))功能。
多對多關系:Many2many 最少要提供一個參數(shù),也就是關聯(lián)的模塊,建議再使用string參數(shù),以便更好的標題展示。
多對多關系的存儲:在數(shù)據(jù)庫層面,數(shù)據(jù)庫表中是不會添加任何字段。它會自動的創(chuàng)建一個新的中間表,這個表只有兩個外鍵ID字段,并且這兩個字段分別關聯(lián)對應的數(shù)據(jù)庫表。

一對多反向關系:One2many按順序接收3個參數(shù):關聯(lián)的模塊,關聯(lián)模塊的字段名稱,標題文本。最開始的兩個參數(shù)通常是模塊名和相反關系對應的外鍵字段名。
分層關系:樹型存儲。

_parent_store = True
# _parent_name = 'parent_id'
parent_id = fields.Many2one('todo.task.tag', 'Parent Tag', ondelete='restrict')
parent_left = fields.Integer('Parent Left', index=True)
parent_right = fields.Integer('Parent Right', index=True)
#添加一個子記錄
child_ids = fields.One2many('todo.task.tag', 'parent_id', 'Child Tags')


3:計算字段

要創(chuàng)建計算字段,需要設置它的compute屬性為方法名。這個計算方法通過計算self的每條記錄來設置字段的值。

注意
self是一個記錄的有序集合,它支持標準的Python集合操作,如len(self)iter(self),加上額外的集合操作recs1 recs2。迭代過程逐個提供self記錄,其中每個記錄本身是大小為1的集合。你可以通過點記號來訪問/分配單個記錄上的字段record.name。

計算字段就像常規(guī)字段一樣聲明,但是有額外的compute參數(shù),參數(shù)值是一個函數(shù)名,在函數(shù)中計算值并返回。

字段= fields.XX(compute='函數(shù)名')@api.depends('參數(shù)')def 函數(shù)(self):    操作

當計算依賴于其他字段時,需要@api.depends裝飾器。

計算字段的值通常取決于所在記錄行的其它字段的值。ORM層期望開發(fā)人員使用depends()裝飾器來指定計算方法的依賴性。當某些依賴關系被修改后,ORM層通過給定的依賴關系來觸發(fā)字段的重新計算。

一種用法:統(tǒng)計一對多字段的長度,得到關聯(lián)人數(shù):

attendees_count = fields.Integer(string="Attendees count", compute='_get_attendees_count', store=True)@api.depends('attendee_ids')def _get_attendees_count(self):    for r in self:        r.attendees_count = len(r.attendee_ids) //根據(jù)關聯(lián)字段的長度,得到出席人數(shù)

onchange:【onchange相當于前端的js函數(shù)!】

"onchange"機制為客戶端界面提供了一種方法:當用戶在字段中填寫了值,不需要向數(shù)據(jù)庫保存任何內容,就可以更新表單。

例如,假設模型有三個字段amount,unit_priceprice,當數(shù)量和單價改變時,自動重新計算價格,并在表單界面更新。要實現(xiàn)這個需求,需要定義一個方法,并使用onchange()裝飾器,onchange()的參數(shù)指定了在那個字段改變時,觸發(fā)方法。其中self代表表單視圖中的記錄,你所做的任何更改,self都將立刻反應在表單上。?

onchange也可以用于檢測字段變化值是否合法。

搜索與寫入:

計算字段可以通過計算得到字段值,但此時只能被讀取顯示,還不能被搜索或者寫入。為此,我們需要實現(xiàn)函數(shù),并通過字段的search參數(shù)、inverse參數(shù)來實現(xiàn)該字段的搜索與寫入定義。

字段= fields.XX(string='展示名',compute='計算函數(shù)',search='搜索函數(shù)',inverse='寫入函數(shù)')def 搜索函數(shù)(self, 參數(shù)):    return [('搜索條件', operator, value)]def 寫入函數(shù)(self):    self.字段 = self.寫入值

存儲計算字段:通過設置“store= true”的定義,計算字段的值也可以存儲在數(shù)據(jù)庫中。

4:關聯(lián)字段

字段 = fields.XX(related='關聯(lián)模型.關聯(lián)字段', string='展示名')

5:模型約束

Python約束檢查函數(shù)應該使用@api.constraints(被約束字段) 修飾,說明被檢查的字段的列表。當其中任何一個被修改,并且在條件失敗時將會拋出一個異常,驗證就會被觸發(fā)。

@api.constrains('字段名')def 驗證函數(shù)(self):    if 條件:    raise ValidationError('驗證錯誤信息!')

6:self.env

self.env 對象給出了訪問請求參數(shù)和其他有用的信息:self.env.cr 或者 self._cr是數(shù)據(jù)庫游標對象,通常用于查詢數(shù)據(jù)庫self.env.uid或者self._uid是當前用戶的數(shù)據(jù)庫IDself.env.user是當前用戶記錄self.env.ref(xml_id)返回XML ID對應的記錄self.env[model_name]返回給定模型的實例

二:視圖

用戶界面的每個組件都以記錄的形式存儲在數(shù)據(jù)庫中,模塊從XML文件加載相應的數(shù)據(jù)時會向數(shù)據(jù)庫添加UI元素,然后odoo從數(shù)據(jù)庫讀取UI元素進行顯示。

菜單項:

<menuitem>快捷元素,提供了一種縮減方式來定義要加載的記錄,我們可以使用它來代替<record model =“ir.ui.menu”>元素。

頂級菜單項:只有id和name屬性。

子菜單項:通過parent =“上層菜單id”屬性置于上層菜單下。

菜單動作:通過action =“act_window”屬性,把點擊菜單的動作指定為act_window中打開某個視圖(如tree/form)

菜單分組:使用groups屬性使其僅對某些安全組可見。

?

窗口動作:

給出GUI客戶端指令,通常供視圖中的菜單項或按鈕調用。

它告訴GUI應該使用什么模型,以及提供哪些視圖。 這些操作可以使用domain過濾器強制只有一部分記錄可見。 他們還可以通過context屬性設置默認值和過濾器。

窗口動作存儲在ir.actions.act_window模型中,可以使用<act_window>快捷標簽在XML文件中定義。

主要屬性有:

name:通過此操作打開的視圖中顯示的標題。res_model:目標模型的標識符IDview_mode:要打開的視圖類型和它們的順序。 第一個是默認打開的。target:如果設置為new,將在彈出的對話框窗口中打開視圖。 默認值為current,在主內容區(qū)域中打開視圖。context:設置關于目標視圖的上下文信息,上下文中可以設置默認值或激活過濾器以及其他信息。domain:域表達式,強制過濾在打開的視圖中可瀏覽的記錄。limit:列表視圖中每個頁面的記錄數(shù)。src_model:應該在什么模型上此動作可用。  multi:當設置為True時,使它在列表視圖中可用,以便它可以應用于多條選中的記錄。 默認值為False。

上下文與域:

context屬性值:上下文是一個包含session數(shù)據(jù)的字典,它可以被客戶端的用戶接口和服務器端的ORM與業(yè)務邏輯使用。

在客戶端,它可以將信息從一個視圖傳輸?shù)搅硪粋€視圖。在服務器端,一些記錄的字段值可以通過上下文被本地設置提供。

domain表達式:域被用來篩選數(shù)據(jù)記錄。它們使用特殊的語法,以便于Odoo ORM 將它們解析后生成對應的SQL WHERE數(shù)據(jù)庫篩選語句。

域表達式是一個條件列表,每個條件是一個形如('field_name', 'operator', value')的元組。

filed_name 是需要篩選的字段,它可以使用點(.)來訪問關系模塊的字段。value 是一個Python表達式的值。它可以使用字符值,比如:字符串,數(shù)字,布爾值,或則列表、某個字段、用戶在context中自定義的有效的值。operator 可以為:    常用的操作符:<,>,<=,>=,=,!=。    '=like'通配符,使用下劃線(_)時,匹配一個任意字符,使用百分號(%)時,匹配多個字符。    'like'匹配一個’%value%’的字符串?!痠like’與此類似但不區(qū)分大小寫?!畁ot like’和‘not ilike’也可以使用    'child of'在層級關系中,篩選子集    'in'和’not in’篩選是否在一個列表里面,所以,給的值應該是個list。當在’to-many’的關系字段中,‘in’的作用和contains的作用一樣

domain表達式是一個包含多項內容的list,因此,可以包含多個條件表達式元組。 默認情況下(隱含),這些條件之間是用AND邏輯符連接的,也就是說,它只返回滿足所有條件的記錄集。

也可以用顯式的邏輯連接符:and連接符(&,默認使用),或連接符(|)。這些連接符后面跟著兩項內容,可以畫成遞歸樹的形式理解。

感嘆號(!),是非操作符(NOT),作用于緊挨它的后一個項。因此,它應該出現(xiàn)在否定項的前面。比如,['!', ('is_done','=',True)]

['|', ('message_follower_ids', 'in', [user.partner_id.id]),      '|', ('user_id', '=', user.id), ('user_id', '=', False)]

畫成遞歸樹:

?

?

?

窗體視圖:form視圖

Header頭部:header區(qū)域一般用于展示文檔流轉的階段和生命周期,以及動作按鈕。

文檔生命周期通過狀態(tài)欄小控件呈現(xiàn)當前所處的狀態(tài).這些通常是狀態(tài)選擇字段或者多對一的階段字段。

狀態(tài)是一個選擇列表,呈現(xiàn)的是過程中有幾個相當穩(wěn)定的步驟階段,例如:新建、處理中、完成。

操作按鈕一般為表單按鈕,最重要的階段可以使用class=“oe_highlight”突出顯示。

Sheet區(qū)域:

標題:在group之外,我們可以使用html基本元素來制定標題,如:div,span,H1,和H2等。

分組:<newline>將強制生成一個新行。附加部分標題可以使用<separator>元素添加到組內。使用col和colspan屬性,我們可以更好的控制組元素布局。col屬性可以指定組中包含的列數(shù),默認值是2,它也可以改為任何數(shù)字,雙數(shù)的效果更好,因為每一個字段加起來都要兩列。組內元素,包括<field>元素,可以使用colspan屬性設置一個特定的列數(shù),默認都是一列。

分頁筆記本:筆記本元素可以包含多個標簽的部分,稱為頁面??梢詫崿F(xiàn)按頁切換輸入、顯示。

<notebook><page string="顯示文字" name="頁名">  內容...</page> <page>  ...</page></notebook>

語義組件:

視圖標簽屬性:

name:標識字段數(shù)據(jù)庫名稱

string:標簽文本,如果我們想要覆蓋模型定義提供的標簽文本,可以使用它。

help:提示文本,當您將指針懸停在字段上時,將顯示一個提示文本,并允許覆蓋模型定義提供的幫助文本。

placeholder:是一個建議文本,顯示在該字段內。

widget:允許我們覆蓋用于該字段的缺省小部件。

options:是一個JSON數(shù)據(jù)結構,為小部件提供了額外的選項,并且取決于每個小部件支持什么。

class:是用于字段HTML呈現(xiàn)的CSS類。

nolabel="True":防止自動字段標簽被呈現(xiàn)。僅對<group>元素中的字段有意義,并且經(jīng)常和<label for="..."> 元素一起使用.

invisible="True":使字段不可見,但是數(shù)據(jù)是從服務器獲取的,并且在表單上可用。

readonly="True": 使表單上的字段不可編輯。

required="True" 在表單上字段為必需字段。

某些字段類型的特殊屬性:

password="True":用于文本字段。它顯示為一個密碼字段,屏蔽輸入的字符。

filename: 用于二進制字段,它是用于存儲上傳文件名稱的模型字段名稱。

mode:用于一對多字段。它指定用于顯示記錄的視圖類型。默認情況下,它是樹,但也可以是表單、看板或圖形。

?

小部件(widget屬性值):

對于文本字段,我們有以下小部件:

email:是用來將電子郵件文本轉換為一個可操作的“郵件”地址。

url?:用于將文本格式化為可單擊的url。

html:用于渲染文本作為html內容;在編輯模式下,以WYSIWYG編輯器,允許內容的格式,而不需要使用HTML語法。

對于數(shù)值字段,我們有以下小部件:

handle:是專門為列表視圖中的序列字段設計的,并顯示一個句柄,允許您將行拖到一個定制的順序。

float_time:擁有小時和分鐘的時間浮點字段格式.

monetary:作為貨幣金額顯示浮動字段。它需要一個currency_id伙伴字段,另一個字段名稱可以設置選項=“{ 'currency_field ':' currency_id“}”。

progressbar 用一個浮點數(shù)表示為一個進度百分比,并且可以用于表示完成率字段.

對于關系和選擇字段,我們有這些附加的小部件:

many2many_tags?: 顯示按鈕標簽列表值.

selection:用于多對一字段的選擇字段部件。

radio 使用單選按鈕顯示選擇字段選項.

kanban_state_selection展示了看板狀態(tài)選擇列表的信號燈。一般狀態(tài)為灰色,已經(jīng)完成為綠色,其他狀態(tài)為紅色.

priority 一個可點擊的星星列表的選擇字段??蛇x項一般為數(shù)字.

?

按鈕(button元素)屬性:

icon? 可用的按鈕圖標在 addons/web/static/src/img/下

string 按鈕的顯示文字

type 是動作執(zhí)行類型??赡苤凳牵簑orkflow, object,action?? 默認是 workflow:

? ? workflow 用于觸發(fā)工作流引擎信號;

? ? object 用于調用Python方法;

? ? action 用于運行窗口動作。

name 觸發(fā)的方法標識:工作流信號名、模型方法名稱或運行窗口操作的數(shù)據(jù)庫ID。

args?傳遞方法的參數(shù)

context 將值添加到上下文

confirm 針對對話框的確認

special="cancel" 用于向導,用來取消和關閉向導表單。

class 加載的類名(常用 oe_highlight)

?

動態(tài)視圖:

視圖元素也支持一些動態(tài)屬性,允許動態(tài)視圖根據(jù)字段值來改變他們的外觀或行為。

?

其他視圖:

日歷視圖:

<field name="arch" type="xml"><calendar date_start="字段" color="顏色"display="[name], Stage [stage_id]" >

日歷視圖屬性:

date_start開始日期的字段,必需字段。

date_end結束日期的字段,可選字段。

date_delay持續(xù)天數(shù)的字段,可以使用代替date_end。

all_day提供一個布爾字段是用來發(fā)送全天事件信號。

color 日歷條目顏色分組的字段?。這個字段中的每個不同的值將被分配一個顏色,并且該字段所有同值的條目將具有相同的顏色。

display 是每個日程表條目的顯示文本. 它使用方括號加字段名稱表示用戶記錄值,例如[name]。

mode 是日歷的默認顯示模式,無論是一天、一周還是一個月。

?

圖形視圖:

<graph type="bar">...</graph>

圖形視圖元素可以有一個類型屬性,可以設置為條形(默認)、餅狀或線。在條形的情況下,可以使用stacked="True"呈現(xiàn)堆疊在一起的條形圖。

?

樞軸視圖:

<pivot>....</pivot>

?

來源:http://www.icode9.com/content-4-89151.html
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Odoo里模型和視圖那些事兒
全球第一免費開源ERP Odoo創(chuàng)建第一個應用開發(fā)
SqlServer數(shù)據(jù)庫技術考試復習資料 - 東昊信息網(wǎng)
vfp視圖
Access教程 第二章 建立數(shù)據(jù)庫
VFP歷年選擇題
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服