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