我正在尝试从OpenERP中的另一个DDL的值填充我的DDL(选择)。这是我尝试过的代码。
这是我的View XML:
<h1>
<label for="categ1" string="Parent category"/>
<field name="categ1" on_change="Product_Category_OnChange(categ1)" />
</h1>
<newline/>
<h1>
<label for="my_products" string="Products" />
<field name="my_products" />
</h1>
此视图的我_columns
就像:
_columns = {
'categ1':fields.many2one('product.category','Parent Category',required=True),
'my_products':fields.many2one('product.product','Products')
}
我的onchange
功能就像:
def Product_Category_OnChange(self,cr,uid,ids,categ1):
pro_id={}
cr.execute('select ... where parent_id='+str(categ1))
res = cr.fetchall()
for i in range(len(res)):
pro_id[i]=res[i]
return {'domain':{'my_products': pro_id}}
问题是,我没有获得my_products
bu的过滤值,而是获取my_products
中的所有值。 Plz让我知道,我做错了什么,或指出我正确的方向。感谢
答案 0 :(得分:1)
我认为您只想展示属于该类别的产品。
def Product_Category_OnChange(self,cr,uid,ids,categ1, context=None):
pro_id={}
product_obj = self.pool.get('product.category')
if not categ1:return {}
categ_obj = product_obj.browse(cr, uid, categ1)
return {'domain':{'my_products':[('categ_id','=',categ_obj.id)]}}
或在xml中
<field name="my_products" domain="[('categ_id','=',categ1)]" />
答案 1 :(得分:0)
就像这样。它适用于我的一方
{'domain':{'my_products':[('id','=',categ1)]}}
语法是这样的,
def Product_Category_OnChange(self,cr,uid,ids,categ1, context=None):
pro_id={}
product_obj = self.pool.get('product.category')
print product_obj.browse(cr, uid, categ1)
cr.execute('select * from product_category where parent_id='+str(categ1))
res = cr.fetchall()
for i in range(len(res)):
pro_id[i]=res[i]
return {'domain':{'my_products':[('id','=',categ1)]}}
<强>更新强>
我理解,首先,你必须制作一个自定义模块。
将以下代码放入.py文件中。
class product(osv.osv):
_inherit = 'product.product'
def name_get(self, cr, uid, ids, context=None):
res = []
cr.execute('select ... where parent_id='+str(ids[0]))
resource = cr.fetchall()
for r in resource:
res.append((r.id, r.name)) # My assumption
return res
看这个http://bazaar.launchpad.net/~openerp/openobject-addons/trunk/view/head:/product/product.py#L778
希望这会对你有所帮助。