首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将列表记录传递给many2many字段?

如何将列表记录传递给many2many字段?
EN

Stack Overflow用户
提问于 2019-07-16 16:00:02
回答 3查看 1.4K关注 0票数 0

我需要得到一个many2many领域的2年之间的范围,每年都必须是模型上的记录

我增加了两个字段来得到这两年,和方法,以得到它们之间的范围。

代码语言:javascript
运行
复制
class yearrange(models.Model):
_name = 'yearrange'
_rec_name = 'name'

name = fields.Char()

 class autopart(models.Model):
_inherit = 'product.template'

@api.multi
@api.depends('start', 'end')
def years(self):
    record = [int(x) for x in range(int(self.start), int(self.end))]
    for rec in self:
        rec.rang=record

start = fields.Char(string="", required=False, )
end = fields.Char(string="", required=False, )
rang = fields.Many2many(comodel_name="yearrange", string="",compute=years )

如果将任何数据添加到年份字段中,则会得到此错误,丢失的记录记录不存在或已被删除。

(记录: 2010、2016、2017、2018、2019、2020年,用户: 2)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-17 15:56:25

我就是这样做的:

代码语言:javascript
运行
复制
class yearrange(models.Model):
_name = 'yearrange'
_rec_name = 'name'

name = fields.Char()
product_id = fields.Many2one(comodel_name="product.template")


 class autopart(models.Model):
_inherit = 'product.template'

@api.multi
@api.onchange('start', 'end')
def years(self):
    print('innnnn')
    for rec in self:
        if rec.start and rec.end:
            record = [int(x) for x in range(int(rec.start)+1, int(rec.end)+1)]
            list = []
            for item in record:
                print(item)
                range_id = self.env['yearrange'].create({
                    'name': str(item)
                })
                list.append(range_id.id)
            rec.rang = [(4, x, None) for x in list]

start = fields.Char(string="", required=False, )
end = fields.Char(string="", required=False, )
rang = fields.One2many(comodel_name="yearrange", inverse_name="product_id", store=True)
票数 1
EN

Stack Overflow用户

发布于 2019-07-16 22:54:34

您可以像这样更新计算方法:

代码语言:javascript
运行
复制
@api.multi
@api.depends('start', 'end')
def years(self):
    for rec in self:
        rec.rang = [(0, 0, {'name': x}) for x in range(int(rec.start), int(rec.end) + 1)]
票数 1
EN

Stack Overflow用户

发布于 2019-07-18 05:42:36

在Odoo中,在创建记录时,可以通过使用它的语义将值传递给它的子One2Many或Many2Many,这里(0,0,{})表示我试图创建新的One2Many记录。

注意:

在valsB中,我附加了ClassC的值,这个dict附加了A类的原始Vals,这就像将嵌套的dict值传递到ClassA中一样

同样,还有一个编辑/更新、删除等语义,请参考下面的示例,这些示例用于One2Many和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))

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

https://stackoverflow.com/questions/57061316

复制
相关文章

相似问题

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