diff --git a/playlist/models/track.py b/playlist/models/track.py index d7cd691..210cbf7 100644 --- a/playlist/models/track.py +++ b/playlist/models/track.py @@ -2,6 +2,7 @@ from django.db import models from random import choice from .album import Album from .artist import Artist +import re class TrackManager(models.Manager): def get_queryset(self): @@ -10,6 +11,7 @@ class TrackManager(models.Manager): class Track(models.Model): def __str__(self): s = f"'{self.name}'" + s += f" AKA '{self.name_sanitized}'" if self.artists.count() > 0: artists = list(map(lambda a:a.name, self.artists.all())) s += " door " @@ -20,6 +22,13 @@ class Track(models.Model): if self.artists.count() > 0: artists = list(map(lambda a:a.name, self.artists.all())) return " & ".join(artists) + + @property + def name_sanitized(self): + return re.match("[^\-\(]*\w", self.name)[0] + + def is_duplicate_of(self): + return Track.objects.exclude(id=self.id).filter(name__startswith=self.name_sanitized).first() id = models.CharField(primary_key=True, max_length=128) name = models.CharField(max_length=255) diff --git a/playlist/views.py b/playlist/views.py index 2077b8d..9c82024 100644 --- a/playlist/views.py +++ b/playlist/views.py @@ -48,6 +48,7 @@ class NominateView(LoginRequiredMixin, View): spotify_id = m.group(1) try: track = Track.all_tracks.get(pk=spotify_id) + if track.old: return TemplateResponse(request, "Nominate.html", { "warning": "Hey een klassieker.", @@ -82,6 +83,13 @@ class NominateView(LoginRequiredMixin, View): # Track track = from_json(Track, json) + dup = track.is_duplicate_of() + if dup: + track.delete() + return TemplateResponse(request, "Nominate.html", { + "error": f"Die hadden we al knul.", + "nominated": dup + }) for artist in track_artists: track.artists.add(artist) track.album = album