python – 如何基于ids搜索(向导)填充many2many字段
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何基于ids搜索(向导)填充many2many字段,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2837字,纯文字阅读大概需要5分钟。
内容图文
![python – 如何基于ids搜索(向导)填充many2many字段](/upload/InfoBanner/zyjiaocheng/805/1c7e5406215745dd934c45933193a210.jpg)
我需要根据搜索结果填充many2many(product_product_ids).例如,我在向导视图(search_test)上定义了一个搜索按钮:
<group>
<field name="quantity"/>
<field name="product_product_ids"/>
</group>
<footer>
<button name="search_test" type="object" string="Search" class="oe_highlight"/>
or
<button string="Cancell" class="oe_link" special="cancel"/>
</footer>
在向导模型中,我已经定义了这些字段和函数:
class sale_order_add_balerce(models.TransientModel):
_name = 'sale.order.add_balerce'
_description = 'Sale order add balerce'
_columns = {
'product_product_ids': fields.many2many('product.product', string='Products'),
'quantity' : fields.float('Quantity', default='1.0')
}
def search_test(self, cr, uid, ids, context=None):
if context is None:
context = {}
product_obj=self.pool.get('product.product')
#search process
product_ids_list = product_obj.search(cr, uid, [], context=context)
print product_ids_list
#populating many2many field
self.write(cr, uid, ids, {'product_product_ids': (6, 0, [product_ids_list])})
return {
'res_model': 'product.product',
'type':'ir.ui.view',
'context': context,
'res_id': ids[0] #open wizard again
}
排队
self.write(cr, uid, ids, {'product_product_ids': (6, 0, [product_ids_list])})
我试图在搜索过程后更新many2many字段,但没有任何反应,我看到没有错误
我也试过这些变种:
self.write(cr, uid, ids, {'product_product_ids': (0, 0, [product_ids_list])})
self.create(cr, uid,{'product_product_ids': (6, 0, [product_ids_list])})
self.create(cr, uid, ids, {'product_product_ids': (0, 0, [product_ids_list])})
但是,我仍然没有填充我的many2many字段(我看不到任何视图变化).
有没有人有建议?
解决方法:
Many2many
对于many2many字段,预计会有一个元组列表.这是接受的元组列表,以及相应的语义.
(0,0,{values})链接到需要使用给定值字典创建的新记录
(1,ID,{values})使用id = ID更新链接记录(在其上写入值)
(2,ID)删除并删除id = ID的链接记录(在ID上调用unlink,这将完全删除对象,以及指向它的链接)
(3,ID)使用id = ID剪切到链接记录的链接(删除两个对象之间的关系但不删除目标对象本身)
(4,ID)链接到id = ID的现有记录(添加关系)
(5)取消全部链接(如使用(3,ID)所有链接记录)
(6,0,[ID])替换链接ID列表(如使用(5)然后(4,ID)ID列表中的每个ID)
查看更多关于Many2many
default_get:
返回fields_list中字段的默认值.
加载向导/表单时调用default_get方法,您需要覆盖此方法才能执行此操作.
句法:
default_get(self, cr, uid, fields_list, context=None):
参数:
fields_list(list):获取默认值的字段列表(example [‘field1′,’field2’,])
返回:
默认值的字典(在对象模型类上设置,通过用户首选项或在上下文中设置)
解:
最后,您的解决方案将覆盖default_get方法,以设置many2many字段的默认值.
def default_get(self,cr,uid,fields,context=None):
res = super(sale_order_add_balerce, self).default_get(cr, uid, fields, context=context)
product_obj=self.pool.get('product.product')
product_ids_list = product_obj.search(cr, uid, [], context=context)
res["product_product_ids"] = [(6,0,[product_ids_list])]
return res
内容总结
以上是互联网集市为您收集整理的python – 如何基于ids搜索(向导)填充many2many字段全部内容,希望文章能够帮你解决python – 如何基于ids搜索(向导)填充many2many字段所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。