Search code examples
pythonodoo

Looping through objects in odoo 14


I'm new to odoo development .I'd like to create a function on my model 'hotel.room' to show number of rooms created which is of type " Dormitory" .However, I have no idea of how to do it. Please help me if you know how I could do it. When I create a new room and select the bedtype as "Dormitory " It should show the number of rooms that is already created as type "Dormitory" . The count should be visible in the form view.

My Model :

class HotelRoom(models.Model):
_name = 'hotel.room'
_description = 'hotel room'
_rec_name = 'room_number'

room_number = fields.Integer('Room Number', required=True)
currency_id = fields.Many2one('res.currency', string='Currency')
room_rent = fields.Monetary('Room Rent')
tag = fields.Many2many('hotel.tags', string='Facilities')

bed_type = fields.Selection([
    ('single', 'Single'),
    ('double', 'Double'),
    ('dormitory', 'Dormitory')
], required=True, default='other')

Form view : I need to show the count here .

<record id="room_create_form" model="ir.ui.view">
<field name="name">hotel.room.form</field>
<field name="model">hotel.room</field>
<field name="arch" type="xml">
  <form>
     <sheet>
        <group>
           <group>
              <field name="room_number"/>
              <field name="currency_id"/>
              <field name="room_rent"/>
           </group>
           <group>
              <field name="bed_type"/>
              <field name="tag" widget="many2many_tags"/>
           </group>
        </group>
     </sheet>
  </form>
   </field>
</record>

Solution

  • You can do like create a method which will call on change of field bed_type

    @api.onchange('bed_type')
    def count_dormitory(self)
        total_bed = self.env['hotel.room'].search_count([('bed_type', '=', 'dormitory')])
    
        return total_bed
    

    But here is a question where you want to display your total count in some other field if yes then create another field and assign this field a value like following.

    @api.onchange('bed_type')
    def count_dormitory(self)
        total_bed = self.env['hotel.room'].search_count([('bed_type', '=', 'dormitory')])
    
        self.another_field =  total_bed