#42 Place Voting / Level

This commit is contained in:
2021-12-30 23:20:05 +01:00
parent 4c43f87560
commit 9980a2d190
7 changed files with 180 additions and 25 deletions

View File

@@ -1,4 +1,5 @@
import os
from math import floor
from django.db import models
from django.urls import reverse
@@ -6,7 +7,7 @@ from django.dispatch import receiver
from django.db.models.signals import post_delete, pre_save
from django.utils.translation import ugettext_lazy as _
from lostplaces.models.abstract_models import Submittable, Taggable, Mapable
from lostplaces.models.abstract_models import Submittable, Taggable, Mapable, Expireable
from easy_thumbnails.fields import ThumbnailerImageField
from easy_thumbnails.files import get_thumbnailer
@@ -15,7 +16,7 @@ PLACE_LEVELS = (
(1, 'Ruin'),
(2, 'Vandalized'),
(3, 'Natures Treasure'),
(4, 'Long Time no See'),
(4, 'Lost in History'),
(5, 'Time Capsule')
)
@@ -58,10 +59,15 @@ class Place(Submittable, Taggable, Mapable):
return reverse('place_detail', kwargs={'pk': self.pk})
def get_hero_index_in_queryset(self):
'''
Calculates the index of the hero image within
the list / queryset of images. Necessary for
the lightbox.
'''
for i in range(0, len(self.placeimages.all())):
image = self.placeimages.all()[i]
if image == self.hero:
return i
return i
return None
@@ -84,6 +90,24 @@ class Place(Submittable, Taggable, Mapable):
return {'latitude': latitude, 'longitude': longitude}
def calculate_place_level(self):
self.remove_expired_votes()
if self.placevotings.count() == 0:
return 5
level = 0
for vote in self.placevotings.all():
level += vote.vote
self.level = floor(level / self.placevotings.count())
def remove_expired_votes(self):
for vote in self.placevotings.all():
if vote.is_expired:
vote.delete()
def __str__(self):
return self.name
@@ -104,7 +128,7 @@ class PlaceAsset(Submittable):
"""
class Meta:
abstract = True
abstract = True
place = models.ForeignKey(
Place,
@@ -180,3 +204,13 @@ def auto_delete_file_on_change(sender, instance, **kwargs):
new_file = instance.filename
if not old_file == new_file:
old_file.delete(save=False)
class PlaceVoting(PlaceAsset, Expireable):
vote = models.IntegerField(choices=PLACE_LEVELS)
def get_human_readable_level(self):
return PLACE_LEVELS[self.vote - 1][1]
def get_all_choices(self):
return reversed(PLACE_LEVELS)