Skip to content

Instantly share code, notes, and snippets.

@monokrome
Created August 23, 2011 05:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save monokrome/1164392 to your computer and use it in GitHub Desktop.
Save monokrome/1164392 to your computer and use it in GitHub Desktop.
class ResponseType(models.Model):
# If you want people to rate others' responses, for instance. This
# provides context on why this specific pattern is useful. Also,
# consider aggregate functions over multiple data types.
rating = models.PositiveIntegerField()
class StringResponseType(ResponseType):
value = models.CharField(max_length=128)
class BooleanResponseType(ResponseType):
value = models.BooleanField(default=False)
class MultipleChoiceResponseType(ResponseType):
result = models.ForeignKey(ResponseType, null=True)
class MultipleChoiceOption(models.Model):
response = models.ForeignKey(ResponseType)
response_type = models.ForeignKey(MultipleChoiceResponseType,
related_name='options')
class Survey(models.Model):
name = models.CharField(max_length=64)
description = models.TextField()
class Question(models.Model):
class Meta(object):
order_by = ('survey','order',)
query = models.TextField()
order = models.PositiveIntegerField(max_length=2)
survey = models.ForeignKey(Survey)
class Response(object):
class Meta(object):
order_by = ('user')
unique_together = (('user', 'question'))
user = models.ForeignKey(User)
question = models.ForeignKey(Question)
# Allows responses of different types. Boolean, String, Integer. etc.
answer = models.ForeignKey(ResponseType)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment