diff -r 4a86df751222 -r 832335761384 app/soc/models/work.py --- a/app/soc/models/work.py Mon Sep 29 14:03:45 2008 +0000 +++ b/app/soc/models/work.py Mon Sep 29 15:31:50 2008 +0000 @@ -22,29 +22,21 @@ ] from google.appengine.ext import db -from soc.models import base -class Work(base.ModelWithFieldAttributes): - """Model of a Work created by one or more Authors. +from django.utils.translation import ugettext_lazy - Work is a "base entity" of other more specific "works" created by "persons". +import polymodel - A Work entity participates in the following relationships implemented - as a db.ReferenceProperty elsewhere in another db.Model: - proposal), survey), documentation) - a 1:1 relationship with each entity containing a more specific type of - "work". These relationships are represented explicitly in the other - "work" models by a db.ReferenceProperty named 'work'. The - collection_name argument to db.ReferenceProperty should be set to the - singular of the entity model name of the other "work" class. The above - relationship names correspond, respectively to these Models: - Proposal, Survey, Documentation - The relationships listed here are mutually exclusive. For example, - a Work cannot be both a Proposal and a Survey at the same time. +class Work(polymodel.PolyModel): + """Model of a Work created by one or more Persons in Roles. - persons) a many:many relationship with Persons, stored in a separate - WorksPersons model. See the WorksPersons model class for details. + Work is a "base entity" of other more specific "works" created by Persons + serving in "roles". + + authors) a many:many relationship with Roles, stored in a separate + WorksAuthors model, used to represent authorship of the Work. See + the WorksAuthors model class for details. reviews) a 1:many relationship between a Work and the zero or more Reviews of that Work. This relation is implemented as the 'reviews' @@ -54,8 +46,34 @@ #: Required field indicating the "title" of the work, which may have #: different uses depending on the specific type of the work. Works #: can be indexed, filtered, and sorted by 'title'. - title = db.StringProperty(required=True) + title = db.StringProperty(required=True, + verbose_name=ugettext_lazy('Title')) + title.help_text = ugettext_lazy( + 'title of the document; often used in the window title') + + #: optional, indexed plain text field used for different purposes, + #: depending on the specific type of the work + abstract = db.StringProperty(multiline=True) + abstract.help_text = ugettext_lazy( + 'short abstract, summary, or snippet;' + ' 500 characters or less, plain text displayed publicly') - #: large, non-indexed text field used for different purposes, depending - #: on the specific type of the work. - abstract = db.TextProperty() + #: Required link name, appended to a "path" to form the document URL. + #: The combined "path" and link name must be globally unique on the + #: site (but, unlike some link names, a Work link name can be reused, + #: as long as the combination with the preceding path is unique). + link_name = db.StringProperty(required=True, + verbose_name=ugettext_lazy('Link name')) + link_name.help_text = ugettext_lazy('link name used in URLs') + + #: short name used in places such as the sidebar menu and breadcrumb trail + #: (optional: title will be used if short_name is not present) + short_name = db.StringProperty(verbose_name=ugettext_lazy('Short name')) + short_name.help_text = ugettext_lazy( + 'short name used, for example, in the sidebar menu') + + #: date when the work was created + created = db.DateTimeProperty(auto_now_add=True) + + #: date when the work was last modified + modified = db.DateTimeProperty(auto_now=True)