code: def port_field_data(request, with_network=False):
      
  
      def add_more_info_port_name(port, network):
          # add more info to the port for the display
          port_name = "{} ({})".format(
              port.name_or_id, ",".join(
                  [ip['ip_address'] for ip in port['fixed_ips']]))
          if with_network and network:
              port_name += " - {}".format(network.name_or_id)
          return port_name
  
      ports = []
      if api.base.is_service_enabled(request, 'network'):
          network_list = api.neutron.network_list_for_tenant(
              request, request.user.tenant_id)
          for network in network_list:
              ports.extend(
                  [(port.id, add_more_info_port_name(port, network))
                   for port in api.neutron.port_list_with_trunk_types(
                       request, network_id=network.id,
                       tenant_id=request.user.tenant_id)
                   if (not port.device_owner and
                       not isinstance(port, api.neutron.PortTrunkSubport))])
      ports.sort(key=lambda obj: obj[1])
      return ports
docs: Returns a list of tuples of all ports available for the tenant.
  
      Generates a list of ports that have no device_owner based on the networks
      available to the tenant doing the request.
  
      :param request: django http request object
      :param with_network: include network name in field name
      :return: list of (id, name) tuples