models.py 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. from django.contrib.auth import get_user_model
  2. from django.core.validators import MaxValueValidator, MinValueValidator
  3. from django.db import models
  4. from django.db.models.deletion import CASCADE, DO_NOTHING
  5. from django.utils import timezone
  6. from django_extensions.db.models import TimeStampedModel
  7. from games.models import Game
  8. User = get_user_model()
  9. class UserGameProgress(TimeStampedModel):
  10. user = models.ForeignKey(User, on_delete=models.CASCADE)
  11. game = models.ForeignKey(Game, on_delete=DO_NOTHING)
  12. started_ts = models.DateTimeField(default=timezone.now, blank=True)
  13. finished_ts = models.DateTimeField(blank=True, null=True)
  14. percent = models.IntegerField(
  15. default=0,
  16. validators=[MaxValueValidator(100), MinValueValidator(0)],
  17. help_text="Keeps track of how far through the game you are",
  18. )
  19. def __str__(self):
  20. return f"Progress in {self.game} for {self.user} ({self.percent}%)"
  21. class UserProfile(models.Model):
  22. user = models.OneToOneField(User, on_delete=CASCADE, related_name="profile")
  23. favorite_games = models.ManyToManyField(Game, related_name="favorite_games")
  24. def __str__(self):
  25. return f"User profile for {self.user}"