SciPost Code Repository

Skip to content
Snippets Groups Projects
models.py 2.14 KiB
Newer Older
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
from django.urls import reverse
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
from django.contrib.auth.models import User
from django.db import models

from django_countries.fields import CountryField

Jorran de Wit's avatar
Jorran de Wit committed
from .managers import PetitionSignatoryQuerySet
Jorran de Wit's avatar
Jorran de Wit committed
from scipost.constants import TITLE_CHOICES
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed


class Petition(models.Model):
    title = models.CharField(max_length=256)
    slug = models.SlugField()
    headline = models.CharField(max_length=256)
    preamble = models.TextField(blank=True, null=True)
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
    statement = models.TextField()
    creator = models.ForeignKey(User, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

Jorran de Wit's avatar
Jorran de Wit committed
    def get_absolute_url(self):
        return reverse('petitions:petition', kwargs={'slug': self.slug})

Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed

class PetitionSignatory(models.Model):
Jorran de Wit's avatar
Jorran de Wit committed
    petition = models.ForeignKey('petitions.Petition', on_delete=models.CASCADE)
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
    signatory = models.ForeignKey('scipost.Contributor', on_delete=models.CASCADE,
                                  blank=True, null=True)
    title = models.CharField(max_length=4, choices=TITLE_CHOICES)
    first_name = models.CharField(max_length=128)
    last_name = models.CharField(max_length=128)
    email = models.EmailField()
    country_of_employment = CountryField()
    affiliation = models.CharField(max_length=300, verbose_name='affiliation')
    organization = models.ForeignKey('organizations.Organization', blank=True, null=True,
                                     on_delete=models.SET_NULL)
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
    signed_on = models.DateTimeField(auto_now_add=True)
    verification_key = models.CharField(max_length=40, blank=True)
    verified = models.BooleanField(default=False)

Jorran de Wit's avatar
Jorran de Wit committed
    objects = PetitionSignatoryQuerySet.as_manager()

Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
    class Meta:
Jorran de Wit's avatar
Jorran de Wit committed
        default_related_name = 'petition_signatories'
        ordering = ['last_name', 'country_of_employment', 'affiliation']
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
        verbose_name_plural = 'petition signatories'

    def __str__(self):
        return '%s, %s %s (%s)' % (self.last_name, self.get_title_display(),
                                   self.first_name, self.petition.slug)