app/soc/models/response.py
changeset 339 b9be44e09530
child 342 72482d8e5b34
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/soc/models/response.py	Wed Oct 15 17:10:27 2008 +0000
@@ -0,0 +1,63 @@
+#!/usr/bin/python2.5
+#
+# Copyright 2008 the Melange authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This module contains the Response Model."""
+
+__authors__ = [
+  '"Todd Larsen" <tlarsen@google.com>',
+]
+
+
+import polymodel
+
+from google.appengine.ext import db
+
+from django.utils.translation import ugettext_lazy
+
+import soc.models.quiz
+import soc.models.user
+
+
+class Response(polymodel.PolyModel):
+  """Model of a Response to a Quiz.
+
+  A Response is the "collection point" for a set of specific Answers to the
+  Questions that make up a Quiz.
+
+  In addition to the explicit ReferenceProperties in the Response Model, a
+  Response entity participates in these relationships:
+
+    answers)  a 1:many relationship between Answer entities and this
+      Response.  Each Answer points to the Response to which it is a part.
+      The collection of Answers that make up a Response is implemented as
+      the 'answers' back-reference Query of the Answer model 'response'
+      reference.
+  """
+
+  #: a required many:1 relationship between Responses and a Quiz that
+  #: defines what Questions for which each Response collects Answers
+  #: (that is, there can be many Responses to the same Quiz)
+  quiz = db.ReferenceProperty(reference_class=soc.models.quiz.Quiz,
+                              required=True, collection_name="responses")
+
+  #: a required many:1 relationship with a User that indicates which User
+  #: submitted the Response (answered the Questions in the Quiz)
+  respondent = db.ReferenceProperty(
+      reference_class=soc.models.user.User, required=True,
+      collection_name="responses")
+
+  # TODO(tlarsen): should 'respondent' be a ReferenceProperty to some Role
+  #   instead?