models.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from django.db import models
  2. from django_extensions.db.models import TimeStampedModel
  3. from django.utils.translation import gettext_lazy as _
  4. BNULL = {"blank": True, "null": True}
  5. class Series(TimeStampedModel):
  6. name = models.CharField(max_length=255)
  7. overview = models.TextField(**BNULL)
  8. tagline = models.TextField(**BNULL)
  9. def __str__(self):
  10. return self.name
  11. class Meta:
  12. verbose_name_plural = "series"
  13. class Video(TimeStampedModel):
  14. class VideoType(models.TextChoices):
  15. UNKNOWN = 'U', _('Unknown')
  16. TV_EPISODE = 'E', _('TV Episode')
  17. MOVIE = 'M', _('Movie')
  18. # General fields
  19. video_type = models.CharField(
  20. max_length=1,
  21. choices=VideoType.choices,
  22. default=VideoType.UNKNOWN,
  23. )
  24. title = models.CharField(max_length=255, **BNULL)
  25. overview = models.TextField(**BNULL)
  26. tagline = models.TextField(**BNULL)
  27. run_time = models.CharField(max_length=8, **BNULL)
  28. run_time_ticks = models.BigIntegerField(**BNULL)
  29. year = models.IntegerField()
  30. # TV show specific fields
  31. tv_series = models.ForeignKey(Series, on_delete=models.DO_NOTHING, **BNULL)
  32. season_number = models.IntegerField(**BNULL)
  33. episode_number = models.IntegerField(**BNULL)
  34. tvdb_id = models.CharField(max_length=20, **BNULL)
  35. imdb_id = models.CharField(max_length=20, **BNULL)
  36. tvrage_id = models.CharField(max_length=20, **BNULL)
  37. # Metadata fields from TMDB
  38. def __str__(self):
  39. if self.video_type == self.VideoType.TV_EPISODE:
  40. return f"{self.tv_series} - Season {self.season_number}, Episode {self.episode_number}"
  41. return self.title