Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用odoo显示3个表中的信息_Python_Xml_Openerp - Fatal编程技术网

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

Python 如何使用odoo显示3个表中的信息,python,xml,openerp,Python,Xml,Openerp,我是Python的新开发人员,刚开始用Python/xml中的Odoo开发应用程序,在特定视图中显示信息时遇到了问题 我解释我的问题:一方面,有学生;另一方面,也有实习期。所有学生都可以注册参加所有课程,他们必须为这次注册排名。 问题是,我无法显示注册的排名 这是我的密码 学生班: class Student(models.Model): _name = 'agsm.student' session_ids = fields.Many2many('agsm.ses

我是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 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>

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

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=“bottom”属性避免了在学生和会话之间使用中间视图的需要。

您不需要使用许多表,因为您使用的桥接表不仅仅是桥接表

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>


谢谢,但当我更改代码时,会出现一个警告:警告字段agsm.student.session\u与未知的comodel\u名称“agsm.student.session”并列,然后出现一个错误werkzeug:ERROR on request:。。。KeyError:'student_id'我如何更改它?:/更改后是否更新了模块?您还需要在更新之前重新启动openerp…是的,openerp将关闭,然后重新启动,我使用以下命令启动:./odoo.py-u agsm(在~/python/odoo$文件夹中)。理论上,模块是正确更新的,对吗?我认为您还需要添加-d参数,如中所示,但最好使用web界面。在“设置”菜单中查找本地模块项,搜索并更新模块。更好地使用web界面。但是要知道,错误是以学生的形式出现的:“字段‘rank’不存在”谢谢,但是当我更改代码时,我得到了一个警告:警告字段agsm.student.session\u使用未知的comodel\u名称‘agsm.student.session’排列,然后是一个错误werkzeug:error on-on-request:。。。KeyError:“学生会议”我如何更改它/你好很抱歉回复晚了。你修好了吗?嗨,是的,我修好了这个问题,但现在我有第二个。。。错误出现在学生的表格中:“字段‘rank’不存在”嗯。。。看不到您编辑的代码有任何错误。尝试从xml中删除排名,并将其设置到可以访问站点的位置。然后进入设置->模型,确保相关模型中存在排名。另外,在对python文件进行更改时,请务必重新启动odoo。。。类秩为init的文件未导入。。。现在我已经更正了,字段排名正确地存在于模型中。但是,我并不是没有问题:当我试图查看学生的表单视图时,又出现了一个错误:编程错误:列agsm_student_session.id不存在第1行:选择“agsm_student_session”。id来自“agsm_student_session”。。。但在数据库中,agsm.student.session模型中存在字段“id”:/
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>