duplicate checking

This commit is contained in:
2024-02-19 21:18:53 +01:00
parent fcf31cb896
commit c48113a3cb
2 changed files with 17 additions and 0 deletions
+9
View File
@@ -2,6 +2,7 @@ from django.db import models
from random import choice from random import choice
from .album import Album from .album import Album
from .artist import Artist from .artist import Artist
import re
class TrackManager(models.Manager): class TrackManager(models.Manager):
def get_queryset(self): def get_queryset(self):
@@ -10,6 +11,7 @@ class TrackManager(models.Manager):
class Track(models.Model): class Track(models.Model):
def __str__(self): def __str__(self):
s = f"'{self.name}'" s = f"'{self.name}'"
s += f" AKA '{self.name_sanitized}'"
if self.artists.count() > 0: if self.artists.count() > 0:
artists = list(map(lambda a:a.name, self.artists.all())) artists = list(map(lambda a:a.name, self.artists.all()))
s += " door " s += " door "
@@ -21,6 +23,13 @@ class Track(models.Model):
artists = list(map(lambda a:a.name, self.artists.all())) artists = list(map(lambda a:a.name, self.artists.all()))
return " & ".join(artists) 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) id = models.CharField(primary_key=True, max_length=128)
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
artists = models.ManyToManyField(Artist) artists = models.ManyToManyField(Artist)
+8
View File
@@ -48,6 +48,7 @@ class NominateView(LoginRequiredMixin, View):
spotify_id = m.group(1) spotify_id = m.group(1)
try: try:
track = Track.all_tracks.get(pk=spotify_id) track = Track.all_tracks.get(pk=spotify_id)
if track.old: if track.old:
return TemplateResponse(request, "Nominate.html", { return TemplateResponse(request, "Nominate.html", {
"warning": "Hey een klassieker.", "warning": "Hey een klassieker.",
@@ -82,6 +83,13 @@ class NominateView(LoginRequiredMixin, View):
# Track # Track
track = from_json(Track, json) 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: for artist in track_artists:
track.artists.add(artist) track.artists.add(artist)
track.album = album track.album = album