如何使用Odoo JS在Many2One字段上应用域过滤器

How to apply domain filter on Many2One field Using Odoo JS?

本文关键字:应用 过滤器 字段 Many2One 何使用 Odoo JS      更新时间:2023-09-26

目前,我正在从事POS定制。我几乎做到了,但卡在了这个问题上。

Py 文件:

class prescription(osv.osv):
     _name = 'res.prescriptions'
     _columns={
         'prescription_id':fields.many2one('res.partner',"customer"),
      }
class prescription_res_partner(osv.osv):
    _inherit = 'res.partner'
    _columns = {
        'prescriptions_ids':   fields.one2many('res.prescriptions','prescription_id','Prescriptions'),
}

我想做的是,当用户在POS中选择客户,然后单击处方按钮时,它仅显示与特定选定客户相关的处方。目前,它显示所有处方,因为我无法正确设置过滤器域。也。。。。。

试图在JS中使用.query(),.filter()来解决我的问题,但是得到一些错误,而如果我放置静态partner_id那么它将显示给定静态partner_id的处方。我想为充满活力的合作伙伴解决这个问题。它只显示选定伴侣的处方...!!

在 JS 文件中:

var def = new $.Deferred();
console.log("deffffffffffffff", def);
var fields = _.find(this.models,function(model){ return model.model === 'res.prescriptions'; });
new instance.web.Model('res.prescriptions')
   .query(fields)
   .filter([['prescription_id', '=', 51]]) // Here i pass static partner_id instead of this i want to pass dynamic partner_id
   .limit(1000)
   .all()
   .then(function(prescriptions){
if (self.render_list_prescription(prescriptions)) { // Render selected partner's Prescription
    def.resolve();
    } else {
    def.reject();
    }
    }, function(err,event){ event.preventDefault(); def.reject(); });
return def;

我花了将近 3 天来克服这个问题,但未能交付。 请帮助我摆脱困境。再次非常感谢您的帮助..!!

您可以尝试在这样的字段中使用域:

_columns = {
'prescriptions_ids': fields.one2many('res.prescriptions','prescription_id','Prescriptions', domain="[('prescription_id', '=', 51)]"),
}

将 51 与相关的另一列更改

您可以在on_change方法中执行此操作。

prescription_ids = # search for prescriptions related to the selected customer  
# self.pool.get('res.prescriptions').search(cr, uid, [('partner_id', '=', YOU SHOULD GET THE CUSTOMER ID)])
res['domain']['prescription_id'] = [('id', 'in', prescription_ids)]
return res