4.1. 访问持久数据

对持久数据的python级访问由 Entity 班级。

实体类绑定到架构实体类型。在注册类时添加描述符,以便根据其架构初始化类:

  • 模式中定义的属性显示为这些类的属性

  • 模式中定义的关系显示为这些类的属性,但是实例列表

Formatting and output generation

  • view(__vid, __registry='views', **kwargs)() ,将给定视图应用于实体(并返回Unicode字符串)

  • absolute_url(*args, **kwargs)() ,返回包含基URL的绝对URL

  • rest_path() ,返回获取实体的相对REST URL

  • printable_value(attr, value=_marker, attrtype=None, format='text/html', displaytime=True)() ,返回允许以给定格式显示属性值的字符串(必要时自动恢复该值)

Data handling

  • as_rset(), converts the entity into an equivalent result set simulating the request Any X WHERE X eid _eid_

  • complete(skip_bytes=True)() ,执行一个请求,该请求立即恢复实体的所有缺少的属性

  • get_value(name)() ,返回与参数中给定的属性名关联的值

  • related(rtype, role='subject', limit=None, entities=False)() ,根据参数中给定的关系返回与当前实体相关的实体列表

  • unrelated(rtype, targettype, role='subject', limit=None)() ,根据参数中给定的关系返回与当前实体不相关的实体对应的结果集,并满足其约束。

  • cw_set(**kwargs)() ,更新实体的属性和/或与给定命名参数的相应值的关系。若要在该实体是关系对象的位置设置关系,请使用 reverse_<relation> 作为参数名。值可以是一个实体、一个实体列表,也可以是无(这意味着应该删除来自或到此对象的给定类型的所有关系)。

  • copy_relations(ceid)() ,复制当前实体的参数中给定了EID的实体的关系。

  • cw_delete() 允许删除实体

4.2. 这个 AnyEntity

为了为每个实体提供特定的行为,我们可以定义继承自 cubicweb.entities.AnyEntity .通常,我们在 mycube.entities 模块(如果我们想在多个文件中拆分代码,则在子模块中),以便在服务器端和客户机端都可以使用。

班级 AnyEntity 是向其添加方法的实体的子类,并帮助专门化(通过进一步的子类化)处理给定的实体类型。

为定义的大多数方法 AnyEntity, in addition to Entity, add support for the Dublin Core 元数据。

Standard meta-data (Dublin Core)

  • dc_title() ,返回对应于元数据的Unicode字符串 Title (默认情况下使用实体架构的第一个非元属性)

  • dc_long_title() ,与dc_标题相同,但可以返回更详细的标题

  • dc_description(format='text/plain')() ,返回对应于元数据的Unicode字符串 Description (默认情况下查找描述属性)

  • dc_authors() ,返回对应于元数据的Unicode字符串 Authors (默认为所有者)

  • dc_creator() ,返回与实体的创建者对应的Unicode字符串

  • dc_date(date_format=None)() ,返回对应于元数据的Unicode字符串 Date (默认更新日期)

  • dc_type(form='')() ,返回通过指定首选窗体显示实体类型的字符串。 (plural 对于复数形式)

  • dc_language() ,返回实体使用的语言

4.3. 遗传

在描述数据模型时,实体可以从其他实体继承,这在面向对象编程中很常见。

你可以重新定义你喜欢的东西,如下所示:

from cubicweb_OTHER_CUBE import entities

class EntityExample(entities.EntityExample):

    def dc_long_title(self):
        return '%s (%s)' % (self.name, self.description)

最具体的实体定义总是ORM使用的实体定义。例如,上面mycube中的新EntityExample替换了另一个cube中的EntityExample。这些类型存储在 etype 剖面图 vregistry .

注意,这与Yams模式继承不同,后者是一个实验性的未记录特性。

4.4. 应用程序逻辑

虽然可以使用实体类实现许多自定义行为和应用程序逻辑,但是程序员必须知道,在实体类上添加新的属性和方法可能会隐藏模式级属性或关系定义。

为了保持实体干净(主要是数据结构加上一些通用方法,如上面所列),应该使用 adapters (见 接口和适配器