'Load the row\'s data and initialize all the cells in the row.
It also set the appropriate row properties which require
the row\'s data to be determined.
The row\'s data is provided either at initialization or as an
argument to this function.
This function is called automatically by
:meth:`~horizon.tables.Row.__init__` if the ``datum`` argument is
provided. However, by not providing the data during initialization
this function allows for the possibility of a two-step loading
pattern when you need a row instance but don\'t yet have the data
available.'

def load_cells(self, datum=None):

    table = self.table
    if datum:
        self.datum = datum
    else:
        datum = self.datum
    cells = []
    for column in table.columns.values():
        cell = table._meta.cell_class(datum, column, self)
        cells.append(((column.name or column.auto), cell))
    self.cells = collections.OrderedDict(cells)
    if self.ajax:
        interval = conf.HORIZON_CONFIG['ajax_poll_interval']
        self.attrs['data-update-interval'] = interval
        self.attrs['data-update-url'] = self.get_ajax_update_url()
        self.classes.append('ajax-update')
    self.attrs['data-object-id'] = table.get_object_id(datum)
    self.classes.append(self.status_class)
    id_vals = {'table': self.table.name, 'sep': STRING_SEPARATOR, 'id': table.get_object_id(datum)}
    self.id = ('%(table)s%(sep)srow%(sep)s%(id)s' % id_vals)
    self.attrs['id'] = self.id
    display_name = table.get_object_display(datum)
    display_name_key = table.get_object_display_key(datum)
    if display_name:
        self.attrs['data-display'] = escape(display_name)
        self.attrs['data-display-key'] = escape(display_name_key)
