首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >odoo one2many默认值未设置

odoo one2many默认值未设置
EN

Stack Overflow用户
提问于 2015-07-24 10:16:55
回答 1查看 11.7K关注 0票数 5

我编写了一个向导,它的表单视图应该显示一个one2many字段,其中包含上下文‘’active_ids‘中的行。

我正确地设置了one2many默认值,但是当窗体打开时,不会显示任何行。

我错过什么了吗?(我对代码错误的缩进表示歉意)

代码语言:javascript
运行
复制
class delivery_wizard(models.TransientModel):
_name = 'as.delivery.wizard'

address = fields.Many2one('res.partner')
details = fields.One2many('as.delivery.detail.wizard', 'delivery')
carrier = fields.Many2one('delivery.carrier')

@api.model
def default_get(self, fields_list):
    res = models.TransientModel.default_get(self, fields_list)
    ids = self.env.context.get('active_ids', [])
    details = self.env['as.delivery.detail'].browse(ids)
    dwz = self.env['as.delivery.detail.wizard']
    dws = []
    for detail in details:
        dw = dwz.create({
            'production': detail.production_id.id,
            'quantity': detail.quantity,
            'actual_quantity': detail.quantity,
            'enabled': detail.production_id.state == 'done',
            'delivery': self.id,
        })
        dws.append(dw.id)

    res['details'] = [(6, False, dws)]
    res['address'] = details[0].delivery_id.address_id.id
    return res

class delivery_detail_wizard(models.TransientModel):
    _name = 'as.delivery.detail.wizard'

    production = fields.Many2one('as.production')
    quantity = fields.Float()
    actual_quantity = fields.Float()
    force = fields.Boolean()
    enabled = fields.Boolean()
    delivery = fields.Many2one('as.delivery.wizard')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-24 12:04:15

问题可能就在这里:

代码语言:javascript
运行
复制
res['details'] = **[(6, False, dws)]**

详细信息字段是One2many字段,[(6,0,IDS)]用于Many2many。在您的示例中,您不需要为details字段分配任何内容;它是一个One2many,因此它是自动的,因为您已经创建了相应的Many2one记录(dw)。

医生的提醒

  • 对于Many2many

对于many2many字段,需要一个元组列表。下面是可接受的元组列表,并具有相应的语义 (0,0,{value })链接到需要用给定值字典创建的新记录。 (1,ID,{value })使用id = ID更新链接记录(在其上写入值) (2,ID)用ID = id删除和删除链接的记录(调用ID上的unlink,这将完全删除对象,以及指向对象的链接) (3,ID)使用id = ID切断链接到链接记录的链接(删除两个对象之间的关系,但不删除目标对象本身) (4,ID)用id = ID链接到现有记录(添加关系) (5)取消所有链接(如对所有链接记录使用(3,ID) ) (6,0,ID)替换链接ID列表(例如对ID列表中的每个ID使用(5)然后(4,ID)) 示例:[(6,0,8,5,6,4)]将many2many设置为ids 8,5,6,4

  • 和One2many:

(0,0,{value })链接到需要用给定值字典创建的新记录。 (1,ID,{value })使用id = ID更新链接记录(在其上写入值) (2,ID)用ID = id删除和删除链接的记录(调用ID上的unlink,这将完全删除对象,以及指向对象的链接) 示例:(0,0,{'field_name':field_value_record2 1,.}),(0,0,{‘field_name’:field_value_2,.})

此外,如果您希望您的代码易于被其他人理解的话,那么尝试为Many2One/One2多个字段遵循odoo准则

One2Many和Many2Many字段应该始终以_ids作为后缀(例如: sale_order_line_ids)。 Many2One字段应该以_id作为后缀(例如: partner_id、user_id、.)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31607934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档