字段不是存储字段,只有存储字段(常规或many2many)对Odoo 15中的'groupby'参数有效

Field is not a stored field, only stored fields (regular or many2many) are valid for the 'groupby' parameter in Odoo 15

在模型中,我添加了一个 Many2one 字段,它是 teacher_id 并且与 res.users 相关,然后我添加了 teacher_genderteacher_id.gender 相关。

teacher_id = fields.Many2one('res.users', string='Teachers', required=True, tracking=True)
teacher_gender = fields.Selection([('male', 'Male'), ('female', 'Female'), ('other', 'Other')], string='Gender', related='teacher_id.gender', tracking=True)

并且在视图中,我这样添加:

<record id="school_teachers_search" model="ir.ui.view">
    <field name="name">school.teachers.search</field>
    <field name="model">school.teachers</field>
    <field name="arch" type="xml">
        <search string="Teachers">
            <field name="name"/>
            <field name="photo"/>
            <field name="teacher_age"/>
            <field name="teacher_dob"/>
            <field name="teacher_gender"/>
            <field name="teacher_blood_group"/>
            <field name="nationality"/>
            <separator/>
            <filter name="teacher_age_old" string="Age More Than 40" domain="[('teacher_age', '>=', 40)]"/>
            <filter name="teacher_age_young" string="Age Less Than 40" domain="[('teacher_age', '&lt;', 40)]"/>
            <filter name="teacher_gender" string="Male" domain="[('teacher_gender', '=', 'male')]"/>
            <filter name="teacher_gender" string="Female" domain="[('teacher_gender', '=', 'female')]"/>
            <separator/>
            <!-- filter for archive / unarchive -->
            <filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
            <separator/>
            <group expand="0" string="Group By">
                <!-- group by name is difference than field name, or else will be issue when set context in ir.actions.act_window below -->
                <filter string="Gender" name="group_teacher_gender" domain="[]" context="{'group_by': 'teacher_gender'}"/>
            </group>
            <!-- search panel is a left sidebar filter -->
            <searchpanel>
                <!-- add searchpanel teacher_gender to this view causing issue -->
                <field name="teacher_gender" string="Gender" icon="fa-cutlery" color="#875A7B" enable_counters="1"/>
                <field name="teacher_blood_group" select="multi" string="Blood Group" icon="fa-truck" enable_counters="1"/>
            </searchpanel>
        </search>
    </field>
</record>

<record model="ir.actions.act_window" id="action_school_teachers">
    <field name="name">teachers</field>
    <field name="res_model">school.teachers</field>
    <field name="view_mode">tree,form,kanban</field>
    <field name="domain">[]</field>
    <!-- set default group by and filter -->
    <!-- add search_default_group_teacher_gender to this view causing issue -->
    <field name="context">{"search_default_group_teacher_gender": 1, "search_default_teacher_age_old": 1}</field>
    <field name="help" type="html">
        <p class="oe_view_nocontent_create">Create new teacher
        </p>
    </field>
</record>

之后,当我来到老师页面时遇到这个问题:

Field school.teachers.teacher_gender is not a stored field, only stored fields (regular or many2many) are valid for the 'groupby' parameter

您可以在此post中搜索“导致问题”,查看导致问题的代码,我已将这些代码注释掉以忽略该问题,但我仍然想知道如何解决问题。

您可以在以下文件中提交此模块的完整代码:
https://github.com/saxsax1995/odoo-15-school/blob/master/school/models/teachers.py
https://github.com/saxsax1995/odoo-15-school/blob/master/school/views/teachers.xml

请帮忙,谢谢。

定义teacher_gender为相关字段时添加store = True。在幕后,相关字段不过是一种计算字段。如果你想在 odoo 中的搜索或组或过滤器中使用任何计算字段,那么你需要将它存储在数据库中。默认不存储相关字段。