openerp学习笔记 domain 的应用
1.在Action中定義,domain用于對(duì)象默認(rèn)的搜索條件:
示例:
<record id="action_orders" model="ir.actions.act_window"><field name="name">Sales Orders</field><field name="type">ir.actions.act_window</field><field name="res_model">sale.order</field><field name="view_type">form</field><field name="view_mode">tree,form,calendar,graph</field><field name="search_view_id" ref="view_sales_order_filter"/><field name="context">{}</field><field name="domain">[('state','not in',('draft','sent','cancel'))]</field><field name="help" type="html"><p class="oe_view_nocontent_create">Click to create a quotation that can be converted into a salesorder.</p><p>OpenERP will help you efficiently handle the complete sales flow:quotation, sales order, delivery, invoicing and payment.</p></field></record> View Code其中:
?<field name="domain">[('state','not in',('draft','sent','cancel'))]</field>
定義了打開訂單窗口時(shí)僅搜索不處于?('draft','sent','cancel') 三種狀態(tài)的訂單。
?
2.在對(duì)象(或視圖)的關(guān)聯(lián)字段(many2one和many2many類型字段)中定義,字段值是關(guān)聯(lián)表的id,domain用于過濾關(guān)聯(lián)表的記錄:
示例:
_name = 'sale.order.line'_description = 'Sales Order Line'_columns = {'order_id': fields.many2one('sale.order', 'Order Reference', required=True, ondelete='cascade', select=True, readonly=True, states={'draft':[('readonly',False)]}),'name': fields.text('Description', required=True, readonly=True, states={'draft': [('readonly', False)]}),'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of sales order lines."),'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], change_default=True),'invoice_lines': fields.many2many('account.invoice.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_id', 'Invoice Lines', readonly=True),'invoiced': fields.function(_fnct_line_invoiced, string='Invoiced', type='boolean',store={'account.invoice': (_order_lines_from_invoice, ['state'], 10),'sale.order.line': (lambda self,cr,uid,ids,ctx=None: ids, ['invoice_lines'], 10)}),'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price'), readonly=True, states={'draft': [('readonly', False)]}),'type': fields.selection([('make_to_stock', 'from stock'), ('make_to_order', 'on order')], 'Procurement Method', required=True, readonly=True, states={'draft': [('readonly', False)]},help="From stock: When needed, the product is taken from the stock or we wait for replenishment.\nOn order: When needed, the product is purchased or produced."),'price_subtotal': fields.function(_amount_line, string='Subtotal', digits_compute= dp.get_precision('Account')),'tax_id': fields.many2many('account.tax', 'sale_order_tax', 'order_line_id', 'tax_id', 'Taxes', readonly=True, states={'draft': [('readonly', False)]}),'address_allotment_id': fields.many2one('res.partner', 'Allotment Partner',help="A partner to whom the particular product needs to be allotted."),'product_uom_qty': fields.float('Quantity', digits_compute= dp.get_precision('Product UoS'), required=True, readonly=True, states={'draft': [('readonly', False)]}),'product_uom': fields.many2one('product.uom', 'Unit of Measure ', required=True, readonly=True, states={'draft': [('readonly', False)]}),'product_uos_qty': fields.float('Quantity (UoS)' ,digits_compute= dp.get_precision('Product UoS'), readonly=True, states={'draft': [('readonly', False)]}),'product_uos': fields.many2one('product.uom', 'Product UoS'),'discount': fields.float('Discount (%)', digits_compute= dp.get_precision('Discount'), readonly=True, states={'draft': [('readonly', False)]}),'th_weight': fields.float('Weight', readonly=True, states={'draft': [('readonly', False)]}),'state': fields.selection([('cancel', 'Cancelled'),('draft', 'Draft'),('confirmed', 'Confirmed'),('exception', 'Exception'),('done', 'Done')], 'Status', required=True, readonly=True,help='* The \'Draft\' status is set when the related sales order in draft status. \\n* The \'Confirmed\' status is set when the related sales order is confirmed. \\n* The \'Exception\' status is set when the related sales order is set as exception. \\n* The \'Done\' status is set when the sales order line has been picked. \\n* The \'Cancelled\' status is set when a user cancel the sales order related.'),'order_partner_id': fields.related('order_id', 'partner_id', type='many2one', relation='res.partner', store=True, string='Customer'),'salesman_id':fields.related('order_id', 'user_id', type='many2one', relation='res.users', store=True, string='Salesperson'),'company_id': fields.related('order_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True),} View Code其中:
'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], change_default=True),
定義了關(guān)聯(lián)選擇產(chǎn)品時(shí),僅顯示可銷售的產(chǎn)品。
?
3.在搜索視圖中定義,domain用于自定義的搜索條件:
示例:
?
<record id="view_sales_order_filter" model="ir.ui.view"><field name="name">sale.order.list.select</field><field name="model">sale.order</field><field name="arch" type="xml"><search string="Search Sales Order"><field name="name" string="Sales Order" filter_domain="['|',('name','ilike',self),('client_order_ref','ilike',self)]"/><filter icon="terp-mail-message-new" string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/><separator/><filter icon="terp-document-new" string="Quotations" name="draft" domain="[('state','in',('draft','sent'))]" help="Sales Order that haven't yet been confirmed"/><filter icon="terp-check" string="Sales" name="sales" domain="[('state','in',('manual','progress'))]"/><filter icon="terp-dolar_ok!" string="To Invoice" domain="[('state','=','manual')]" help="Sales Order ready to be invoiced"/><filter icon="terp-dolar_ok!" string="Done" domain="[('state','=','done')]" help="Sales Order done"/><separator/><filter string="My Sales Orders" domain="[('user_id','=',uid)]" help="My Sales Orders" icon="terp-personal" name="my_sale_orders_filter"/><field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/><field name="user_id"/><field name="project_id"/><group expand="0" string="Group By..."><filter string="Customer" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/><filter string="Salesperson" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/><filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/><filter string="Order Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_order'}"/></group></search></field></record> View Code?
其中:
<field name="name" string="Sales Order" filter_domain="['|',('name','ilike',self),('client_order_ref','ilike',self)]"/>
定義了在搜索視圖中輸入訂單編號(hào)時(shí),同時(shí)按訂單編號(hào)和客戶關(guān)聯(lián)編號(hào)過濾。
<filter string="My Sales Orders" domain="[('user_id','=',uid)]" help="My Sales Orders" icon="terp-personal" name="my_sale_orders_filter"/>
定義了在搜索視圖中選擇"My Sales Orders"標(biāo)簽時(shí),過濾銷售員是當(dāng)前登錄用戶的訂單。
?
4.在記錄規(guī)則中定義,domain用于定義用戶對(duì)對(duì)象中記錄訪問的權(quán)限:
示例:
<record model="ir.rule" id="sale_order_comp_rule"><field name="name">Sales Order multi-company</field><field name="model_id" ref="model_sale_order"/><field name="global" eval="True"/><field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field></record> View Code其中:
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
定義了用戶僅允許查詢訂單中未指定分公司或訂單中指定的分公司用戶具有訪問權(quán)限的銷售訂單。
?
5.domain表達(dá)式規(guī)則說明:
domain中的單個(gè)條件是一個(gè)三個(gè)元素組成的元組。
第一個(gè)是對(duì)象的一個(gè)column,也就是字段名;
第二個(gè)是比較運(yùn)算符 “=, !=, >, >=, <, <=, like, ilike, in, not in, child_of, parent_left, parent_right“ ;
第三個(gè)就是用來比較的值了。
多個(gè)條件用“|”(or),“&”(and),“!”(no)邏輯運(yùn)算符鏈接。
邏輯運(yùn)算符作為前綴放置于條件前面。“|”與“&”必須兩個(gè)條件鏈接,“!”對(duì)一個(gè)條件取反。默認(rèn)邏輯運(yùn)算符為“&”。
舉個(gè)例子:
['|', ('project_id.privacy_visibility', '=', 'public'), '&', ('project_id.privacy_visibility', 'in', ['portal', 'followers']), '|', ('message_follower_ids','in', [user.partner_id.id]), ('user_id', '=', user.id), ]
寫個(gè)容易看的方式:
[
'|',('project_id.privacy_visibility', '=', 'public'),
?'&',('project_id.privacy_visibility', 'in', ['portal', 'followers']),
? ? ?'|', ('message_follower_ids','in', [user.partner_id.id]),
? ('user_id', '=', user.id),
]
這個(gè)例子的意思是:
(('project_id.privacy_visibility', '=', 'public') or
(('project_id.privacy_visibility', 'in', ['portal', 'followers']) and (('message_follower_ids','in', [user.partner_id.id]) or?('user_id', '=', user.id))))
轉(zhuǎn)載于:https://www.cnblogs.com/cnshen/p/3189306.html
總結(jié)
以上是生活随笔為你收集整理的openerp学习笔记 domain 的应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用Jquery处理跨域请求
- 下一篇: 一个一直没想通的问题:为什么印度的软件外