'Generate a data list of this resource
@param fields: list of fields to include (field selector strings)
@param start: index of the first record to include
@param limit: maximum number of records to include
@param left: additional left joins for DB query
@param orderby: orderby for DB query
@param distinct: distinct-flag for DB query
@param getids: return the record IDs of all records matching the
query (used in search to create a filter)
@param list_id: the list identifier
@param layout: custom renderer function (see S3DataList.render)
@return: tuple (S3DataList, numrows, ids), where numrows represents
the total number of rows in the table that match the query;
ids is empty unless getids=True'

def datalist(self, fields=None, start=0, limit=None, left=None, orderby=None, distinct=False, getids=False, list_id=None, layout=None):

    if (fields is None):
        fields = [f.name for f in self.readable_fields()]
    selectors = list(fields)
    table = self.table
    pkey = table._id.name
    if (pkey not in selectors):
        fields.insert(0, pkey)
        selectors.insert(0, pkey)
    data = self.select(selectors, start=start, limit=limit, orderby=orderby, left=left, distinct=distinct, count=True, getids=getids, raw_data=True, represent=True)
    numrows = data.numrows
    dl = S3DataList(self, fields, data.rows, list_id=list_id, start=start, limit=limit, total=numrows, layout=layout)
    return (dl, numrows, data.ids)
