设置One2many字段的默认值

时间:2016-08-13 02:43:05

标签: python-2.7 openerp odoo-9

我有一个班级student_student,其中有一个如下定义的one2many字段result_ids

    result_ids = fields.One2many("schoolresults.detail", "student_id", "School Results", default="_get_subjects")

def _get_subjects(self):
     cr = self.pool.cursor()
     self.env
     return self.pool.get('schoolresults.subject').search(cr, self.env.uid, [])

在另一边我有一个班级schoolresults_subject

class schoolresults_subject(models.Model):
    _name = "schoolresults.subject"
    _description = "Student's subjects."
    name = fields.Char("Subject")

class schoolresults_detail(models.Model):
    _name = "schoolresults.detail"
    _description = "Student's results."
    student_id = fields.Many2one("student.student", "Student", ondelete="cascade")
    subject_id = fields.Many2one("schoolresults.subject", "Subject")
    result = fields.Float("Result", compute='_compute_value', store=True)

我想要做的是使用one2many字段中的default参数,每当用户尝试创建新的学生档案时,使用最后一个班级的科目列表填充result_ids。 但每当我尝试创建学生档案时,我都会收到此错误Wrong values for student.student.result_ids。 无论如何,那要实现吗? enter image description here

PS。我正在使用Odoo 9

4 个答案:

答案 0 :(得分:4)

我没有完全满足您的要求,但尝试以下内容:

.tree-cell > .tree-disclosure-node > .arrow  {
-fx-background-color: white;}

但是解释了错误消息:您正在返回def _get_subjects(self): subjects = self.env['schoolresults.subject'].search([]) details = self.env['schoolresults.detail'] for subject in subjects: details |= details.new({'subject_id': subject.id}) return details 的RecordSet,但您的字段schoolresults.subject具有comodel result_ids。那是错的; - )

答案 1 :(得分:2)

我可以通过覆盖default_get方法来完成此操作:

def default_get(self, fields):
    res = super(student_student, self).default_get(fields)
    srd = self.env['schoolresults.detail']
    ids=[]
    school_result={'subject_id':1,'result':0} #dict for fields and their values
    sr = srd.create(school_result)
    ids.append(sr.id)


    res['result_ids'] = ids
    return res

这是如何为one2many字段覆盖default_get

信用证转到:Default values for one2many

答案 2 :(得分:1)

请阅读以下内容:如果要从操作设置one2many字段的默认值,则可以创建一个元组列表,其格式与我们用于创建或写入one2many字段的格式相同,然后您就可以传递给上下文。 您可以复制上下文-

context = self.env.context.copy()

准备像这样的一个值-

pr_lines = []
        for pr_line in pr_obj.line_ids: #loop for multiple lines.
            pr_lines.append((0,0, {
                'purchase_request_id' : pr_obj.id,
                'product_id' : pr_line.product_id.id, 
                'description' : pr_line.name,
                'qty_transfer' : pr_line.product_qty,
                'uom_id' : pr_line.product_uom_id.id,
            }))

您可以像这样更新您的上下文-

    context.update({
            'default_warehouse_id': self.approving_matrix_id.warehouse.id,
            'default_internal_transfer_receipt': pr_lines,
        })

在操作中,您可以传递上下文 'context':上下文,

答案 3 :(得分:0)

result_ids = fields.Many2many("schoolresults.detail", "student_id", "School Results", default="_get_subjects")

def get_default_lines(self):
    obj = self.env['your.class.name'].search([])
    return obj

尝试在您的班级中添加many2many字段。