我有一个班级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
。
无论如何,那要实现吗?
PS。我正在使用Odoo 9
答案 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
。
答案 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字段。