私はあなたが拒否できるユーザーの他の固定リストと承認できるユーザーの固定リストを持っていることを理解しました。少数のユーザーであるにもかかわらず、私は2つのグループを作成し、あなたのボタンの上にgroups
属性を使用しますが、あなたは彼らのためにグループのカップルを作成したくないでももしそうなら、あなたはこれを行うことができます:
from openerp import models, api
import json
from lxml import etree
FIRST_APPROVE = [] # Fill this list with the IDs of the users who can update approve
SECOND_APPROVE = [] # Fill this list with the IDs of the users who can update reject
class YourClass(models.Model):
_inherit = 'your.class'
def update_json_data(self, json_data=False, update_data={}):
''' It updates JSON data. It gets JSON data, converts it to a Python
dictionary, updates this, and converts the dictionary to JSON data
again. '''
dict_data = json.loads(json_data) if json_data else {}
dict_data.update(update_data)
return json.dumps(dict_data, ensure_ascii=False)
def set_modifiers(self, element=False, modifiers_upd={}):
''' It updates the JSON modifiers with the specified data to indicate
if a XML tag is readonly or invisible or not. '''
if element is not False: # Do not write only if element:
modifiers = element.get('modifiers') or {}
modifiers_json = self.update_json_data(
modifiers, modifiers_upd)
element.set('modifiers', modifiers_json)
@api.model
def fields_view_get(self, view_id=None, view_type='form', toolbar=False,
submenu=False):
res = super(YourClass, self).fields_view_get(
view_id=view_id, view_type=view_type, toolbar=toolbar,
submenu=submenu)
doc = etree.XML(res['arch'])
if view_type == 'form':
if self.env.uid in FIRST_APPROVE:
upd_approve_btn_search = doc.xpath("//button[@name='update_approve']")
upd_approve_btn = upd_approve_btn_search[0] \
if upd_approve_btn_search else False
if upd_approve_btn:
self.set_modifiers(upd_approve_btn, {'invisible': False, })
if self.env.uid in SECOND_APPROVE:
upd_reject_btn_search = doc.xpath("//button[@name='update_reject']")
upd_reject_btn = upd_reject_btn_search[0] \
if upd_reject_btn_search else False
if upd_reject_btn:
self.set_modifiers(upd_reject_btn, {'invisible': False, })
res['arch'] = etree.tostring(doc)
return res
をFIRST APPROVE
とSECOND_APPROVE
は、それぞれの操作を実行できるユーザーの固定IDS(たとえば、FIRST APPROVE = [2, 7, 9]
)を導入する必要があります。
YourClass
は、ボタンのメソッドを宣言したクラス(update_approve
とupdate_reject
と宣言したクラス)でなければなりません。
重要:XMLコードをロードした後、fields_view_get
は0
これを設定するinvisible
値が上書きされますので、このコードで、あなたのボタンは、(あなたのXMLビューでinvisible="1"
を書く)は常に目に見えないでなければなりませんあなたの目的を管理する珍しい方法ですが、残念ながらグループを作成したくない場合は、最も簡単な方法だと思います。私はあなたと他のユーザーに役立つことを願っています!