From a5f9eae15a15224a32b406c082041b35abe8daba Mon Sep 17 00:00:00 2001 From: Mark Hoekveen Date: Mon, 19 Feb 2024 22:32:22 +0100 Subject: [PATCH] duplicate checking fix --- playlist/models/track.py | 13 ++++++++++--- playlist/views.py | 5 +++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/playlist/models/track.py b/playlist/models/track.py index 210cbf7..5d9241b 100644 --- a/playlist/models/track.py +++ b/playlist/models/track.py @@ -10,12 +10,15 @@ class TrackManager(models.Manager): class Track(models.Model): def __str__(self): - s = f"'{self.name}'" - s += f" AKA '{self.name_sanitized}'" + s = f"'{self. id} | {self.name}'" if self.artists.count() > 0: artists = list(map(lambda a:a.name, self.artists.all())) s += " door " s += " & ".join(artists) + dup = self.is_duplicate_of() + #dup = None + if dup: + s += f" !! Is een duplicaat van {dup.id}" return s @property def artist(self): @@ -28,7 +31,11 @@ class Track(models.Model): 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() + tracks = Track.objects.exclude(id=self.id).filter(name__startswith=self.name_sanitized) + artists = [artist.name for artist in self.artists.all()] + for artist in artists: + tracks = tracks.filter(artists__name__exact=artist) + return tracks.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 9c82024..b6663b9 100644 --- a/playlist/views.py +++ b/playlist/views.py @@ -83,6 +83,9 @@ class NominateView(LoginRequiredMixin, View): # Track track = from_json(Track, json) + for artist in track_artists: + track.artists.add(artist) + track.save() dup = track.is_duplicate_of() if dup: track.delete() @@ -90,8 +93,6 @@ class NominateView(LoginRequiredMixin, View): "error": f"Die hadden we al knul.", "nominated": dup }) - for artist in track_artists: - track.artists.add(artist) track.album = album track.save() get_banter.delay(track.id)