Only undo last voted
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
from .track import Track
|
||||||
from django.db.models.signals import post_save
|
from django.db.models.signals import post_save
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
|
|
||||||
@@ -14,6 +15,7 @@ class Background(models.Model):
|
|||||||
class Profile(models.Model):
|
class Profile(models.Model):
|
||||||
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
||||||
background = models.ForeignKey(Background, null=True, on_delete=models.SET_NULL)
|
background = models.ForeignKey(Background, null=True, on_delete=models.SET_NULL)
|
||||||
|
last_voted = models.ForeignKey(Track, null=True, on_delete=models.SET_NULL)
|
||||||
|
|
||||||
@receiver(post_save, sender=User)
|
@receiver(post_save, sender=User)
|
||||||
def create_user_profile(sender, instance, created, **kwargs):
|
def create_user_profile(sender, instance, created, **kwargs):
|
||||||
|
|||||||
+8
-4
@@ -37,6 +37,9 @@ class VoteView(LoginRequiredMixin, View):
|
|||||||
else:
|
else:
|
||||||
raise Exception(f"{request.user} already voted for {track}")
|
raise Exception(f"{request.user} already voted for {track}")
|
||||||
vote = Vote.objects.create(track=track, user=request.user, points=score)
|
vote = Vote.objects.create(track=track, user=request.user, points=score)
|
||||||
|
(profile,_) = Profile.objects.get_or_create(user=request.user)
|
||||||
|
profile.last_voted = track
|
||||||
|
profile.save()
|
||||||
return self.get(request, undo=vote)
|
return self.get(request, undo=vote)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
@@ -117,7 +120,6 @@ class NominateView(LoginRequiredMixin, View):
|
|||||||
class SettingsView(LoginRequiredMixin, View):
|
class SettingsView(LoginRequiredMixin, View):
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
backgrounds = Background.objects.all()
|
backgrounds = Background.objects.all()
|
||||||
print(backgrounds)
|
|
||||||
(profile,created) = Profile.objects.get_or_create(user=request.user)
|
(profile,created) = Profile.objects.get_or_create(user=request.user)
|
||||||
context = {
|
context = {
|
||||||
"backgrounds": backgrounds,
|
"backgrounds": backgrounds,
|
||||||
@@ -125,12 +127,9 @@ class SettingsView(LoginRequiredMixin, View):
|
|||||||
}
|
}
|
||||||
return TemplateResponse(request, "Settings.html", context)
|
return TemplateResponse(request, "Settings.html", context)
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
print(request.POST)
|
|
||||||
try:
|
try:
|
||||||
bg = Background.objects.get(pk=request.POST['background'])
|
bg = Background.objects.get(pk=request.POST['background'])
|
||||||
print(f"{request.user} wants their background set to {bg}")
|
|
||||||
(profile,_) = Profile.objects.get_or_create(user=request.user)
|
(profile,_) = Profile.objects.get_or_create(user=request.user)
|
||||||
print(profile)
|
|
||||||
profile.background = bg
|
profile.background = bg
|
||||||
profile.save()
|
profile.save()
|
||||||
except:
|
except:
|
||||||
@@ -144,11 +143,16 @@ class UndoView(LoginRequiredMixin, View):
|
|||||||
def post(self, request):
|
def post(self, request):
|
||||||
spotify_id = self.request.POST['spotify_id']
|
spotify_id = self.request.POST['spotify_id']
|
||||||
track = Track.objects.get(pk=spotify_id)
|
track = Track.objects.get(pk=spotify_id)
|
||||||
|
(profile,_) = Profile.objects.get_or_create(user=request.user)
|
||||||
|
if profile.last_voted != track:
|
||||||
|
raise Exception(f"{request.user} is not allowed to undo vote for {track}")
|
||||||
vote = None
|
vote = None
|
||||||
try:
|
try:
|
||||||
vote = Vote.objects.get(user=request.user, track=track)
|
vote = Vote.objects.get(user=request.user, track=track)
|
||||||
except Vote.DoesNotExist:
|
except Vote.DoesNotExist:
|
||||||
raise Exception(f"{request.user} did not vote for {track}")
|
raise Exception(f"{request.user} did not vote for {track}")
|
||||||
|
profile.last_voted = None
|
||||||
|
profile.save()
|
||||||
vote.delete()
|
vote.delete()
|
||||||
return HttpResponseRedirect('/vote/')
|
return HttpResponseRedirect('/vote/')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user