如何使用odoo显示3个表中的信息

时间:2015-12-04 09:09:05

标签: python xml openerp

我是Python的新开发人员,刚开始使用python / xml中的Odoo开发应用程序,我在显示特定视图中的信息时遇到问题。

我解释我的问题:在一边,有学生;另一方面,还有会议。所有学生都可以注册所有课程,他们必须为此注册排名。 问题是,我无法显示注册的排名。

这是我的代码,

学生班:

class Student(models.Model):
        _name = 'agsm.student'
        session_ids = fields.Many2many('agsm.session',
                                            relation="agsm_student_session",
                                            column1='student_id',
                                            column2='session_id')

会话类:

class Session(models.Model):
        _name='agsm.session'
        student_ids = fields.Many2many('agsm.student',
                                       relation='agsm_student_session',
                                       column1='session_id',
                                       column2='student_id')

和做关系的班级

class Rank(models.Model):
    _name = 'agsm.student.session'
    session_id = fields.Many2one('agsm.session', string='Session')
    student_id = fields.Many2one('agsm.student', string='Student')
    rank = fields.Integer(default=5)

我想做的是在学生的表单视图中显示排名。目前我有这段代码,但我怎样才能添加等级的显示

<label for="session_ids"/>
<field name="session_ids">
    <tree string="Registered sessions">
        <field name="name"/>
    </tree>
</field>

感谢答案

编辑新代码是: 学生

class Student(models.Model):
    _name = 'agsm.student'
    session_ids = fields.Many2many('agsm.session',
                                        relation="agsm_student_session",
                                        column1='student_id',
                                        column2='session_id')
    session_ranks = fields.One2Many('agsm.student.session', 'student_id')

等级

class Rank(models.Model):
    _name = 'agsm.student.session'

    session_id = fields.Many2one('agsm.session', string='Session')
    student_id = fields.Many2one('agsm.student', string='Student')
    rank = fields.Integer(default=5)

会话

class Session(models.Model):
    _name='agsm.session'
    student_ids = fields.Many2many('agsm.student',
                                   relation='agsm_student_session',
                                   column1='session_id',
                                   column2='student_id')

学生观点

<label for="session_ranks"/>
<field name="session_ranks">
    <tree string="Registered sessions" editable="bottom">
        <field name="session_id"/>
        <field name="rank"/>
    </tree>
</field>

2 个答案:

答案 0 :(得分:0)

为了满足您的需求,您应该进行以下更改:

class Student(models.Model):
    _name = 'agsm.student'
    session_ids = fields.Many2many('agsm.session',
                                        relation="agsm_student_session",
                                        column1='student_id',
                                        column2='session_id')
    session_ranks = fields.One2Many('agsm.student.session', 'student_id')
视图中的

<label for="session_ranks"/>
<field name="session_ranks">
    <tree string="Registered sessions" editable="bottom">
        <field name="session_id"/>
        <field name="rank"/>
    </tree>
</field>

editable =&#34; bottom&#34; 属性可以避免在学生和会话之间使用中间视图。

答案 1 :(得分:0)

您需要不使用many2many表,因为您使用桥接表不仅仅是桥接表。

class Student(models.Model):
    _name = 'agsm.student'
    student_session_ids = fields.One2many('agsm.student.session','Student Sessions')

class Rank(models.Model):
    _name = 'agsm.student.session'
    session_id = fields.Many2one('agsm.session', string='Session')
    student_id = fields.Many2one('agsm.student', string='Student')
    rank = fields.Integer(default=5)

class Session(models.Model):
    _name='agsm.session'

视图

<label for="student_session_ids"/>
<field name="student_session_ids" >
    <tree string="Registered sessions">
        <field name="session_id"/>
        <field name="rank"/>
    </tree>
</field>