Created
April 8, 2020 11:23
-
-
Save markvdb/d7bb7b91263141c4c86c5baa2a455b41 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.db import models | |
from django.contrib.auth.models import User | |
from django.utils.translation import gettext_lazy as _ | |
import rules | |
from rules.contrib.models import RulesModel | |
@rules.predicate | |
def is_kiezer(user,antwoord): | |
if not antwoord: | |
return False | |
return antwoord.gebruiker == user | |
class Vraag(models.Model): | |
vraag_tekst = models.CharField(max_length=200) | |
def __str__(self): | |
return self.vraag_tekst | |
class Meta: | |
verbose_name = _('vraag') | |
verbose_name_plural = _('vragen') | |
def maak_stembrieven(self): | |
for u in User.objects.all(): | |
if Antwoord.objects.filter(gebruiker=u, vraag=self).exists(): | |
break | |
else: | |
a= Antwoord(gebruiker=u, vraag=self) | |
a.save() | |
@property | |
def aantal_stemmen(self): | |
return Antwoord.objects.filter(vraag=self).count() | |
@property | |
def aantal_stemmen_voor(self): | |
return Antwoord.objects.filter(vraag=self).filter(antwoord=1).count() | |
@property | |
def aantal_stemmen_tegen(self): | |
return Antwoord.objects.filter(vraag=self).filter(antwoord=0).count() | |
@property | |
def aantal_onthoudingen(self): | |
return Antwoord.objects.filter(vraag=self).filter(antwoord=2).count() | |
@property | |
def aantal_niet_gestemd(self): | |
return Antwoord.objects.filter(vraag=self).filter(antwoord=3).count() | |
class Antwoord(RulesModel): | |
class AntwoordKeuzes(models.IntegerChoices): | |
NIET_GESTEMD = 3, _('niet gestemd') | |
ONTHOUDING = 2, _('onthouding') | |
NEEN = 0, _('neen') | |
JA = 1, _('ja') | |
gebruiker = models.ForeignKey(User, on_delete=models.CASCADE, related_name= 'antwoordgebruiker', editable=False, null=True, blank=True) | |
vraag = models.ForeignKey('Vraag', on_delete=models.CASCADE, related_name= 'gebruikervraag') | |
antwoord = models.PositiveSmallIntegerField(choices=AntwoordKeuzes.choices, default=3) | |
tijdstip= models.DateTimeField(auto_now_add=True) | |
def __str__(self): | |
return str(self.vraag)+ ': '+ str(self.antwoord) + ' '+ str(self.tijdstip) | |
class Meta: | |
verbose_name = _('antwoord') | |
verbose_name_plural = _('antwoorden') | |
unique_together = ('gebruiker', 'vraag',) | |
rules_permissions = { | |
'change': is_kiezer, | |
'view': is_kiezer | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment