2016-08-13 14 views
0

私は、次のように定義されたone2manyフィールドresult_idsを持つクラスstudent_studentあります設定のデフォルト値

反対側で
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パラメータを使用して、ユーザーが新しい学生プロフィールを作成しようとするたびに、最後のクラスの科目リストを使用してdsを追加します。 しかし、学生のプロフィールを作成しようとすると、私はこのエラーが発生しますWrong values for student.student.result_ids。 これを達成するにはどうしてですか? enter image description here

PS。

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 

しかし、エラーメッセージの説明:私は、私はここに完全にあなたの要件を得るが、以下のような何かをしようとしていないOdoo 9

+0

生徒のプロフィールが作成されるたびにデフォルトの値(科目)を設定しようとしています。既存のデータをフィルタリングしようとしていません – pourjour

答えて

1

です。あなたのクラスにmany2manyフィールドを追加Default values for one2many

+0

最後に編集した後にコードを編集しましたか? 'res ['result_ids'] = [0,0、VALS]'は 'res ['result_ids'] = [(0,0、VALS)]' – CZoellner

+0

のようになります。このコードはスムーズに動作しません。正しいものを置きます。 – pourjour

2

を使用していますが、schoolresults.subjectのレコードセットを返すしているが、あなたのフィールドresult_idsには、モデルschoolresults.detailがあります。

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_getメソッドをオーバーライドすることによってこれを行うことができますちょうど間違っ;-)

+0

私はあなたに同意します、私は何か複雑なことをしようとしています。演算子 '| ='を理解すると、あなたのコードは残念なことに機能しませんでした。私は 'default_get'関数をオーバーライドする必要があると思います。 – pourjour

+1

あなたの助けていただきありがとうございます、私は最終的にdefault_getメソッドをオーバーロードして解決策を得ました。 – pourjour

+1

あなたの結果を私たちと共有:-) '|'演算子は 'RecordSets'で動作します。 2つの '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 

試してみてください。

クレジットに行きます。

関連する問題