宜兴通达竭诚为您服务。

通达科技 - 宜兴电脑维护及IT服务外包服务商

Extending create() and write()
  • 上传者: Administrator
  • 上传时间:2023年11月19日 01时35分56秒
摘要:
* Extending create() and write() ** *** * Extending create() method ** ** To include any additional functionality while creating a record of the mod ......
正文 相关文章 请喝咖啡

    Extending create() and write()

    Extending create() method

    To include any additional functionality while creating a record of the model, we can extend a model's create() function.

    Let's use adding a "notes" field to the "sale.order" as an example.

    In this case, editing the notes field will result in a "UserError" for users who are not members of the "Administration/Access Rights" group.

    class SaleOrder(models.Model):

       _inherit = 'sale.order'

       notes = fields.Text(string='Notes')

       def create(self,vals):

           res = super(SaleOrder,self).create(vals)

           if 'notes' in vals and not self.env.user.has_group('base.group_erp_manager'):

               raise UserError(_("You cannot edit the field 'notes'"))

           return res

    As an example of the write() method, we can do the same thing. Before writing, we evaluate the group and occurrence of the field in the vals to write, and if there is a problem, we raise a UserError exception.

    def write(self,vals):

       res = super(SaleOrder,self).write(vals)

       if 'notes' in vals and not self.env.user.has_group('base.group_erp_manager'):

           raise UserError(_("You cannot edit the field 'notes'"))

       return res

    Overriding _name_search()

    By redefining name search, we can search for a record in the Many2one widget using any field in the model.

    Let’s take an example: In the Many2one field, we can search for a partner by name, phone number, or email.

    class ResPartner(models.Model):

       _inherit = 'res.partner'

       @api.model

       def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):

           args = args or []

           domain = []

           if name:

               domain = ['|', '|', ('name', operator, name), ('phone', operator, name), ('email', operator, name)]

           return self._search(domain + args, limit=limit, access_rights_uid=name_get_uid)

    To begin, we must inherit the res.partner class and override the _name search() function.

    Most of the arguments we receive are passed on in their original form to the method's super() implementation:

    · name is a string containing the value that the user has typed thus far, the user input.

    · As a prefilter for the potential records, args can either be None or a search domain. (It could be derived from the domain parameter of the Many2one relation, for instance.)

    · operator is a string that contains the match operator. Generally, you will have 'ilike' or '='.Customizing how records are searched

    · The maximum number of rows to retrieve is specified by limit.

    · name_get_uid can be used to specify a different user when calling name_get() to compute the strings to display in the widget.

     

    本文章从网上收集,如有侵权请联系tderp@tderp.com删除
  • 微信扫一扫,一分也是爱:
  • 微信

服务原则及地区范围

宜兴通达网络科技有限公司,地处中国宜兴环科园内,是一家高新技术企业。公司在企业网络维护和企业信息化建设与咨询方面,有10多年经验。

我公司愿与客户一道,力求彻底解决客户问题!
我们不是在给企业提供“头痛医头、脚痛医脚”的暂时解决方案,而是在部署根本性安全与稳定服务!!
我们愿携手客户,建立企业IT规划;杜绝随意安装系统、软件等操作;力求共同维护有序、安全、稳定的网络办公环境!!!
IT服务,服务是根本,客户是上帝;我们提供快速响应、快速上门、快速排查,提供优质高效的服务!!!!

通达科技提供全国范围内的服务,服务形式包括远程协助、电话咨询、电子邮件咨询、传真咨询、问答平台的问题解决等。

宜兴地区提供上门服务:

  • 市区服务:宜城街道、城北街道(屺亭街道)、新街街道、新庄街道、环科园、渚桥开发区
  • 市郊服务:张渚镇、西渚镇、太华镇、徐舍镇、官林镇、杨巷镇、新建镇、和桥镇、高塍镇、万石镇、周铁镇、芳桥镇、丁蜀镇、湖父镇。
  • 联系电话:189-21-343434
  • 在线沟通: