models.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from django.db import models
  2. class PoliceOfficer(models.Model):
  3. """
  4. An officer of the NYPD.
  5. E.g. "Jake Peralta"
  6. """
  7. badge_number = models.IntegerField(primary_key=True)
  8. first_name = models.CharField(max_length=200)
  9. surname = models.CharField(max_length=200)
  10. rank = models.CharField(max_length=200)
  11. arrests = models.ManyToManyField(
  12. "Arrest",
  13. related_name="arresting_officers",
  14. help_text='All arrests made by the officer'
  15. )
  16. class PoliceStation(models.Model):
  17. officers = models.ForeignKey("PoliceOfficer", on_delete=models.CASCADE)
  18. class Precinct(PoliceStation):
  19. """
  20. A precinct of officers
  21. E.g. "Brookyln 99"
  22. """
  23. number = models.IntegerField(primary_key=True)
  24. burrough = models.CharField(max_length=20)
  25. captain = models.OneToOneField(PoliceOfficer, on_delete=models.CASCADE)
  26. class Meta:
  27. unique_together = ("burrough", "number")
  28. def natural_key(self):
  29. return (self.burrough, self.number)
  30. class Division(PoliceStation):
  31. """
  32. A division of officers, not in the field.
  33. E.g. Major Crimes Unit
  34. """
  35. name = models.CharField(max_length=200)
  36. class Arrest(models.Model):
  37. alleged_crime = models.CharField(max_length=20)
  38. perp = models.ForeignKey("Perpetrator", on_delete=models.CASCADE)
  39. arrest_date = models.DateField()
  40. processing_date = models.DateField()
  41. class Perpetrator(models.Model):
  42. """
  43. A person who is accused of a crime.
  44. E.g. Doug Judy, aka. "The Pontiac Bandit"
  45. """
  46. first_name = models.CharField(max_length=200)
  47. surname = models.CharField(max_length=200)
  48. alias = models.CharField(max_length=200)