问题
I need add a section functionality like sales > quotation view has, in one of my tree views. .
Code of my view is something like this:
<record id="view_qualification_form_inh" model="ir.ui.view">
<field name="name">hr.applicant.form</field>
<field name="model">hr.applicant</field>
<field name="inherit_id" ref="hr_recruitment.hr_applicant_view_form" />
<field name="arch" type="xml">
<xpath expr="//field[@name = 'description']" position="after">
<notebook>
<page string="Qualification">
<field name="qualification_lines">
<tree editable="bottom">
<control>
<create name="add_line_control" string="Add a line"/>
<create name="add_section_control" string="Add a section"
context="{'default_display_type': 'line_section'}"/>
</control>
<field name="qualification_type_id"/>
<field name="qualification_type_line_id" domain="[('qualification_type_id','=',qualification_type_id)]"/>
<field name="score" />
</tree>
</field>
<group class="oe_subtotal_footer">
<field name="avg_score" class="oe_subtotal_footer_separator"/>
</group>
</page>
</notebook>
</xpath>
</field>
</record>
Code of my model:
class HrApplicant(models.Model):
_inherit = 'hr.applicant'
qualification_lines = fields.One2many('hr.applicant.qualification', 'qualification_data',)
avg_score = fields.Float(compute='compute_score_average',store=True,index=True, string='Average Score')
display_type = fields.Selection([
('line_section', "Section"),
('line_note', "Note")], default=False, help="Technical field for UX purpose.")
class Qualification(models.Model):
_name = 'hr.applicant.qualification'
_description = 'Applicant Qualification'
qualification_data = fields.Many2one('hr.applicant', string='Qualification')
qualification_type_id = fields.Many2one('hr.applicant.qualification.rule', string='Qualification Type')
qualification_type_line_id = fields.Many2one(related='qualification_type_id.qualification_type_line_id')
score = fields.Float(related='qualification_type_line_id.score')
The thing is, I got a add a section option but it is working same like default "add a line".
I know it has lot of things to do with python code, even tried to get it from sales' addon but it has very complex structure. I am a beginner, so if anyone can help me out with code or at-least steps for it.
回答1:
You need to set the qualification_lines
widget attribute to section_and_note_one2many
and define the display_type
in the applicant qualification model instead of the applicant
model, it will be used to check if you need to add a section (help: Technical field for UX purpose).
In the following example the section text will be stored in the name
field:
View definition:
<field name="qualification_lines"
widget="section_and_note_one2many">
<tree editable="bottom">
<control>
<create name="add_line_control" string="Add a line"/>
<create name="add_section_control" string="Add a section"
context="{'default_display_type': 'line_section'}"/>
</control>
<field name="name" widget="section_and_note_text" optional="show"/>
<field name="display_type" invisible="1"/>
<field name="score"/>
</tree>
</field>
Model definition:
class Qualification(models.Model):
_name = 'hr.applicant.qualification'
_description = 'Applicant Qualification'
name = fields.Char(required=True)
display_type = fields.Selection([
('line_section', "Section"),
('line_note', "Note")], default=False, help="Technical field for UX purpose.")
qualification_data = fields.Many2one('hr.applicant', string='Qualification')
来源:https://stackoverflow.com/questions/64520995/odoo-14-add-a-section-functionality-in-tree-view