4.1. 访问持久数据¶
对持久数据的python级访问由 Entity
班级。
实体类绑定到架构实体类型。在注册类时添加描述符,以便根据其架构初始化类:
模式中定义的属性显示为这些类的属性
模式中定义的关系显示为这些类的属性,但是实例列表
Formatting and output generation :
view(__vid, __registry='views', **kwargs)()
,将给定视图应用于实体(并返回Unicode字符串)absolute_url(*args, **kwargs)()
,返回包含基URL的绝对URLrest_path()
,返回获取实体的相对REST URLprintable_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 (见 接口和适配器 )