diff -r 875bdc0fe8ce -r 105011657405 doc/book/en/devrepo/entityclasses/load-sort.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/en/devrepo/entityclasses/load-sort.rst Fri Apr 23 17:31:46 2010 +0200 @@ -0,0 +1,53 @@ + +.. _FetchAttrs: + +Loaded attributes and default sorting management +```````````````````````````````````````````````` + +* 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.