Skip to content

Instantly share code, notes, and snippets.

@markvdb
Created April 8, 2020 11:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save markvdb/d7bb7b91263141c4c86c5baa2a455b41 to your computer and use it in GitHub Desktop.
Save markvdb/d7bb7b91263141c4c86c5baa2a455b41 to your computer and use it in GitHub Desktop.
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