2016-08-13 138 views
0

設置默認值我有一個類student_student具有像限定的one2many字段result_ids以下:爲One2many字段

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) 

我想要做的是填充result_i帶有最後一堂課的科目列表,每當用戶嘗試創建新的學生檔案時,使用one2many字段中的default參數。 但是,每當我嘗試創建一個學生檔案,我得到這個錯誤Wrong values for student.student.result_ids。 無論如何要實現這一目標嗎? enter image description here

PS。我使用Odoo 9

+0

我試圖設置一個默認的設置值(科目),每次創建學生檔案。我沒有試圖過濾現有的數據 – pourjour

回答

1

我可以通過重寫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 

這是如何覆蓋default_get爲one2many領域。

幸得:Default values for one2many

+0

DId你編輯你的代碼後最後編輯(鏈接到另一個問題)?因爲'res ['result_ids'] = [0,0,VALS]'的行應該更像'res ['result_ids'] = [(0,0,VALS)]' – CZoellner

+0

這段代碼運行不正常,將把正確的一個。 – pourjour

2

我這裏不完全讓你的要求,但你可以試試下面的:

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 

但解釋錯誤消息:你回國的schoolresults.subject一個記錄,但您的字段result_ids的編碼爲schoolresults.detail。這是絕對錯誤的;-)

+0

我同意你的觀點,我正在嘗試一些複雜的東西。但是,理解運算符'| =',並且你的代碼不能運行。我認爲我應該重寫'default_get'函數,我會嘗試這個並且看看。 – pourjour

+1

感謝您的幫助,我終於通過重載default_get方法得到了解決方案,並且它工作正常。 – pourjour

+1

與我們分享您的結果:-)'|'運算符與'RecordSets'一起使用。您可以將兩個'RecordSets'與它合併([doc](http://www.odoo.com/documentation/9.0/reference/orm.html#recordsets))。 – CZoellner

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領域類。

相關問題