models.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. from django.db import models
  2. import random
  3. import string
  4. def random_id():
  5. return ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(256))
  6. class ZipCode(models.Model):
  7. objects = None
  8. zip = models.CharField(max_length=5)
  9. type = models.CharField(max_length=4)
  10. decommissioned = models.BooleanField()
  11. primary_city = models.CharField(max_length=28)
  12. acceptable_cities = models.CharField(max_length=100)
  13. unacceptable_cities = models.CharField(max_length=100)
  14. state = models.CharField(max_length=2)
  15. county = models.CharField(max_length=100)
  16. timezone = models.CharField(max_length=100)
  17. area_codes = models.CharField(max_length=100)
  18. world_region = models.CharField(max_length=100)
  19. country = models.CharField(max_length=100)
  20. latitude = models.FloatField()
  21. longitude = models.FloatField()
  22. irs_estimated_population = models.IntegerField()
  23. def __str__(self):
  24. return self.zip
  25. class Meta:
  26. ordering = ['zip']
  27. class AgeRange(models.Model):
  28. age_range = models.CharField(max_length=100)
  29. def __str__(self):
  30. return self.age_range
  31. class Meta:
  32. ordering = ['age_range']
  33. class Voter(models.Model):
  34. first_name = models.CharField(max_length=100)
  35. last_name = models.CharField(max_length=100)
  36. age_range = models.ForeignKey(AgeRange, on_delete=models.CASCADE)
  37. zip_code = models.ForeignKey(ZipCode, on_delete=models.CASCADE)
  38. def __str__(self):
  39. return "%s %s (%s)" % (self.last_name, self.first_name, self.zip_code)
  40. class Meta:
  41. ordering = ['last_name']
  42. class Question(models.Model):
  43. question_text = models.TextField()
  44. pub_date = models.DateTimeField('date published')
  45. question_id = models.CharField(max_length=256, default=random_id)
  46. def __str__(self):
  47. return self.question_text
  48. class Meta:
  49. ordering = ['pub_date']
  50. def images(self):
  51. return QuestionImage.objects.filter(question=self)
  52. class QuestionImage(models.Model):
  53. question = models.ForeignKey(Question, on_delete=models.CASCADE)
  54. image = models.ImageField(upload_to='media/questions/images')
  55. def __str__(self):
  56. return "%s (%s)" % (self.question, self.image)
  57. class Meta:
  58. ordering = ['question']
  59. class Vote(models.Model):
  60. question = models.ForeignKey(Question, on_delete=models.CASCADE)
  61. vote = models.BooleanField()
  62. vote_id = models.CharField(max_length=256, default=random_id)
  63. def __str__(self):
  64. return "%s (%s)" % (self.question, self.vote)
  65. class Meta:
  66. ordering = ['question']
  67. class VoterQuestion(models.Model):
  68. voter = models.ForeignKey(Voter, on_delete=models.CASCADE)
  69. question = models.ForeignKey(Question, on_delete=models.CASCADE)
  70. def __str__(self):
  71. return "%s (%s)" % (self.voter, self.question.id)
  72. class Meta:
  73. ordering = ['voter']