diff --git a/savepointradio/profiles/apps.py b/savepointradio/profiles/apps.py index 420c741..79f55bc 100644 --- a/savepointradio/profiles/apps.py +++ b/savepointradio/profiles/apps.py @@ -5,4 +5,4 @@ class ProfilesConfig(AppConfig): name = 'profiles' def ready(self): - from .signals import create_profile + from .signals import create_profile, update_song_plays diff --git a/savepointradio/profiles/signals.py b/savepointradio/profiles/signals.py index f1a6506..55965fa 100644 --- a/savepointradio/profiles/signals.py +++ b/savepointradio/profiles/signals.py @@ -1,8 +1,9 @@ from django.conf import settings +from django.db.models import F from django.db.models.signals import post_save from django.dispatch import receiver -from .models import RadioProfile +from .models import RadioProfile, SongRequest @receiver(post_save, sender=settings.AUTH_USER_MODEL) @@ -12,3 +13,17 @@ def create_profile(sender, instance, created, **kwargs): """ if created: profile, new = RadioProfile.objects.get_or_create(user=instance) + + +@receiver(post_save, sender=SongRequest) +def update_song_plays(sender, instance, created, update_fields, **kwargs): + """ + Update the song data with the latest play time and the number of times + played. + """ + if not created and update_fields: + if 'played_at' in update_fields: + song = instance.song + song.last_played = instance.played_at + song.num_played = F('num_played') + 1 + song.save()