'Odoo can I display a field of a many2one related field without duplicating it in the model using the related flag

Say, in odoo I have a Model A with a many2one field to model B. Model B has a field "city".

Now I want to create a form for model A in which I want the "city" field of model B.

I can do this by adding the city field of Model B to model A as well and giving it the related flag.

b_city = fields.Char(related='b_id.city', depends=['b_id'])

But I dont like this because than I have to add this field to my model. I would prefer if can do this without creating this field. Is this possible?

-----------Edit---------------

Something that I'm looking for is like this:

                    <page string="Offers">
                        <field name="offer_ids">
                            <tree>
                                <field name="price"/>
                                <field name="partner_id"/>
                                <field name="validity"/>
                                <field name="date_deadline"/>
                                <button name="accept" type="object" icon="fa-check"/>
                                <button name="reject" string="X" type="object" icon="fa-xmark"/>
                                <field name="status"/>
                            </tree>
                        </field>
                    </page>

This a page in a form where the corresponding model has a one2many field which is being displayed in a tree view. Now, I want to the other way around. I want to display in a form some fields of another model to which the there is a many2one field.

Is it possible to do this in the the xml view?



Solution 1:[1]

There is no way to do that in Odoo unless using related field.

Check Odoo ORM documentation

Solution 2:[2]

USING PYTHON CODE :

Example 1:

invoice_partner_icon = fields.Char(compute='_compute_invoice_partner_display_info', store=False, compute_sudo=True)

@api.depends('partner_id', 'invoice_source_email')
    def _compute_invoice_partner_display_info(self):
        for move in self:
            vendor_display_name = move.partner_id.display_name
            if not vendor_display_name:
                if move.invoice_source_email:
                    vendor_display_name = _('From: ') + move.invoice_source_email
                    move.invoice_partner_icon = '@'
                else:
                    vendor_display_name = _('Created by: %s') % (move.sudo().create_uid.name or self.env.user.name)
                    move.invoice_partner_icon = '#'
            else:
                move.invoice_partner_icon = False
            move.invoice_partner_display_name = vendor_display_name

OR USING UI :

As admin, You can create a new field in Model B which is related to model A without storing it in the database : in App Settings, switch to debug mode by adding "?debug=1" in your url, reload the page, then go to the new Technical Menu-tab > Fields.

Then, create your new related field using the panel "Advanced Properties" Related Field: ... and then uncheck [ ] Stored

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Waleed Mohsen
Solution 2