#summary Proposal entity model
#labels Phase-Design,Contents-Skeleton,Design-Model


_*Eventually, this topic should be populated by the output of*_ `pydoc`.

{{{
class Proposal(db.Model):
  """Model of a Proposal, which is a specific form of a Work.

  A Proposal entity participates in a number of relationships:

   work)  a required 1:1 relationship with a Work entity that contains the
     general "work" properties of the Proposal.  The back-reference in the Work
     model is a Query named 'proposal'.

     work.authors:  the Authors of the Work referred to by this relation
       are the authors of the Proposal.

     work.title:  the title of the Proposal.

     work.abstract:  publicly displayed as a proposal abstract or summary.

     work.reviews:  reviews of the Proposal by Reviewers.

   tasks)  an optional 1:many relationship of Task entities using the
     Proposal as their foundation.  This relation is implemented as the
     'tasks' back-reference Query of the Task model 'proposal' reference.

   details:  required db.TextProperty describing the proposal in detail.
     Unlike the work.abstract, which is considered "public" information,
     the contents of 'details' is only to be displayed to Persons in roles
     that have a "need to know" the details.
  """
  work = db.ReferenceProperty(reference_class=Work, required=True,
                              collection_name="proposal")

  details = db.TextProperty()
}}}

----
_Copyright 2008 Google Inc._
_This work is licensed under a_
[http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-attribution-2_5.html Creative Commons Attribution 2.5 License].
[http://creativecommons.org/licenses/by/2.5/ http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-2_5-88x31.png]
