【问题标题】:How to filter a data/field base on a many2one?如何根据 many2one 过滤数据/字段?
【发布时间】:2015-07-25 02:47:57
【问题描述】:

有谁能帮忙解决这个问题:Uncaught TypeError: undefined is not a function?这是我所做的:

我制作了一个继承销售、crm 和帐户的模块。在类 crm_lead 我添加了一些更改:

def _get_available_product(self, cr, uid, ids, name, arg, context=None):
    vals = {}
    pr_id = []
    for rec in self.browse(cr, uid, ids, context=context):
        id = rec.id 
        product_list = self.pool.get('product.product').search(cr,uid,[('product_state','=','available')]) 
        pr_id = [product.id if product.id else False for product in self.pool.get('product.product').browse(cr,uid,product_list,context=context)] 
        vals[id] = {'product_ids':pr_id}
    return vals

def _defaults_product(self, cr, uid, ids, context=None):
    product_list = self.pool.get('product.product').search(cr,uid,[('product_state','=','available')])         
    pr_id = [product.id if product.id else False for product in self.pool.get('product.product').browse(cr,uid,product_list,context=context)] 
    value = {"value":{'product_ids':pr_id}}
    _logger.info("\n\n\t\t\tVALUE %s"%(str(value)))
    return value 

_columns = {
 'product_id' : fields.many2one('product.product','Product'),
 'product_ids' : fields.function(_get_available_product, type='many2many', relation='product.product', method=True, store=False, multi='compute_available_product', string='Available Product'),
} 

_defaults = {
      'product_ids' : _defaults_product,
} 

crm_lead_view.xml

 <group>
     <field name="product_ids" nolabel="1" widget="many2many" invisible="1"
 </group>
 <group>
    <group>
       <field name="product_id" required="1" domain="[('id','in',product_ids[0][2])]"/>
  ....

当我尝试创建潜在客户时,会像上面一样弹出客户端错误。我的目标实际上是,如果我创建一个潜在客户,我想过滤 product_id,以便只显示那些 w/c product_state 为“可用”的产品。

非常感谢任何帮助。

【问题讨论】:

    标签: xml filter openerp-7 many-to-one


    【解决方案1】:

    您的域过滤器在您的 xml 视图文件中定义的方式错误

    只是我们应该按照下面的方式设置产品字段的过滤器

     <group>
        <group>
           <field name="product_id" required="1" domain="[('product_state','=','available')]"/>
     </group>
    </group>
    

    听到我展示了您的上述问题,我已经弄清楚了几件事 你完全以错误的方式来实现代码。 没有别的,你只是让代码更复杂。

    1.不需要创建一个新的函数来生成产品id,生成产品id并给出可用的产品。

    2.无需创建单独的字段添加到xml视图文件中。

    3.在视图xml文件中的产品上添加域过滤器定义错误

    希望我的回答对你有帮助:)

    【讨论】:

    • 这种情况的问题是“product_state”不是在“crm.lead”类上定义的,而是在“product.product”类上定义的。
    • 是的,product_state 是 product 的一部分,但不是 crm.lead 的一部分,因此在这种情况下,我们必须设置您必须在我们的产品对象中添加的产品状态
    猜你喜欢
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多