usecase scnario.
i want user to pick and service (internal or subcontract) then each service has couple of vendors, i wanted to show in next dropdown list to pickup. (rather than showing all contacts).
code example below, each time, slightly different error
mode = fields.Selection([('internal', 'Internal'),('subcontract', 'Subcontract')],string='Mode', default='internal')
shortlisted_contacts=fields.Selection([], string='Shortlisted Contacts')
@api.onchange('mode')
def update_responsible(self):
for record in self:
print ("Running a function on mode change")
matching_string = record.display_name.split(' ')[1].lower()
print ("MATCHING STRING:",matching_string)
service_products = self.env['product.product'].search([('type', '=', 'service'),('name','ilike',matching_string)])
print ("TOTAL SERVICES:",len(service_products))
if service_products:
vendor_ids = service_products.mapped('seller_ids.name.id')
print ("TOTAL VENDORS:",len(vendor_ids))
if len(vendor_ids)>0:
# print all vendor names
vendor_records = self.env['res.partner'].browse(vendor_ids)
vendor_names = vendor_records.mapped('name')
print ("VENDOR NAMES:",vendor_names)
record.partner_id = vendor_records[0].id
# contacts_list = [(str(contact.id), contact.name) for contact in vendor_records]
# record.shortlisted_contacts = contacts_list
# record.shortlisted_contacts = contacts_list[0][0] if contacts_list else False
contacts_list = [contact.name for contact in vendor_records]
# contacts_string = ','.join([f"('{id}', '{name}')" for id, name in contacts_list])
# record.shortlisted_contacts = contacts_string
# contacts_string = ','.join([f"('{i+1}', '{name}')" for i, name in enumerate(contacts_list)])
# record.shortlisted_contacts = contacts_string
contacts_list = [(str(i+1), name) for i, name in enumerate(vendor_names)]
record.shortlisted_contacts = contacts_list
else:
# raise validation error about no vendors found in service product
raise UserError("No vendors found in service product.")
else:
# raise validation error about no service product found
raise UserError("No service product found for this checklist item.")
total error types (last few attempts)
ValueError: Wrong value for mrp.custom.checklist.line.shortlisted_contacts: 'Contractor Tempering,Contractor A'
Wrong value for mrp.custom.checklist.line.shortlisted_contacts: [('20', 'Contractor Tempering'), ('10', 'Contractor A')]
ValueError: too many values to unpack (expected 2)
ValueError: Wrong value for mrp.custom.checklist.line.shortlisted_contacts: "('1', 'Contractor Tempering'),('2', 'Contractor A')"