Skip to content

Achievements ~ Data Model

mhenry111 edited this page Apr 22, 2025 · 1 revision
dataModelDiagram

A Game has Achievements:

class Game(models.Model): *from games/models.py

  • name = models.TextField()
  • description = models.TextField()
  • year_published = models.IntegerField(null=True, blank=True)
  • etc.

class Achievement(models.Model):

  • class Rarity(models.IntegerChoices):
    • COMMON = 1, ‘Common’
    • UNCOMMON = 2, ‘Uncommon’
    • RARE = 3, ‘Rare’
    • PRECIOUS = 4, ‘Precious’
  • name = models.TextField()
  • description = models.TextField(null=True, blank=True)
  • spoiler = models.BooleanField()
  • rarity = models.IntegerField(choices=Rarity.choices)
  • game = models.ForeignKey(Game, on_delete = models.CASCADE)

A User has Achievements:

class UserAchievement(models.Model):

  • user = models.ForeignKey(User, on_delete = models.CASCADE)

  • achievement = models.ForeignKey(Achievement, on_delete = models.CASCADE)

  • pinned = models.BooleanField()

  • date_earned = models.DateTimeField()

  • class Meta:

    • unique_together = (user, achievement)

A User has played Games:

class UserProfile(models.Model): *from user/models.py

  • user = models.OneToOneField(User, on_delete=models.CASCADE)
  • display_name = models.TextField()
  • bio = models.TextField(blank=True)
  • friends = models.ManyToManyField(User, related_name="friendship", blank=True)
  • date_joined = models.DateTimeField(auto_now_add=True)
  • games = models.ManyToManyField(Game)
Clone this wiki locally