The class attribute fetch_attrs allows to define in an entity class a list of names of attributes or relations that should be automatically loaded when entities of this type are fetched from the database. In the case of relations, we are limited to subject of cardinality `?` or `1` relations.
The class method fetch_order(attr, var) expects an attribute (or relation) name as a parameter and a variable name, and it should return a string to use in the requirement ORDERBY of an RQL query to automatically sort the list of entities of such type according to this attribute, or None if we do not want to sort on the attribute given in the parameter. By default, the entities are sorted according to their creation date.
The class method fetch_unrelated_order(attr, var) is similar to the method fetch_order except that it is essentially used to control the sorting of drop-down lists enabling relations creation in the editing view of an entity. The default implementation uses the modification date. Here’s how to adapt it for one entity (sort on the name attribute):
class MyEntity(AnyEntity):
__regid__ = 'MyEntity'
fetch_attrs = ('modification_date', 'name')
@classmethod
def fetch_unrelated_order(cls, attr, var):
if attr == 'name':
return '%s ASC' % var
return None
The function fetch_config(fetchattrs, mainattr=None) simplifies the definition of the attributes to load and the sorting by returning a list of attributes to pre-load (considering automatically the attributes of AnyEntity) and a sorting function based on the main attribute (the second parameter if specified, otherwise the first attribute from the list fetchattrs). This function is defined in cubicweb.entities.
For example:
class Transition(AnyEntity):
"""..."""
__regid__ = 'Transition'
fetch_attrs, fetch_order = fetch_config(['name'])
Indicates that for the entity type “Transition”, you have to pre-load the attribute name and sort by default on this attribute.