Source code for events.models.registration_information_field

from django.db import models
from django.utils.translation import gettext_lazy as _

from . import Event, EventRegistration
from utils.translation import ModelTranslateMeta, MultilingualField


[docs]class RegistrationInformationField(models.Model, metaclass=ModelTranslateMeta): """Describes a field description to ask for when registering""" BOOLEAN_FIELD = "boolean" INTEGER_FIELD = "integer" TEXT_FIELD = "text" FIELD_TYPES = ( (BOOLEAN_FIELD, _("Checkbox")), (TEXT_FIELD, _("Text")), (INTEGER_FIELD, _("Integer")), ) event = models.ForeignKey(Event, models.CASCADE) type = models.CharField(_("field type"), choices=FIELD_TYPES, max_length=10,) name = MultilingualField(models.CharField, _("field name"), max_length=100,) description = MultilingualField( models.TextField, _("description"), null=True, blank=True, ) required = models.BooleanField(_("required"),)
[docs] def get_value_for(self, registration): if self.type == self.TEXT_FIELD: value_set = self.textregistrationinformation_set elif self.type == self.BOOLEAN_FIELD: value_set = self.booleanregistrationinformation_set elif self.type == self.INTEGER_FIELD: value_set = self.integerregistrationinformation_set try: return value_set.get(registration=registration).value except ( TextRegistrationInformation.DoesNotExist, BooleanRegistrationInformation.DoesNotExist, IntegerRegistrationInformation.DoesNotExist, ): return None
[docs] def set_value_for(self, registration, value): if self.type == self.TEXT_FIELD: value_set = self.textregistrationinformation_set elif self.type == self.BOOLEAN_FIELD: value_set = self.booleanregistrationinformation_set elif self.type == self.INTEGER_FIELD: value_set = self.integerregistrationinformation_set try: field_value = value_set.get(registration=registration) except BooleanRegistrationInformation.DoesNotExist: field_value = BooleanRegistrationInformation() except TextRegistrationInformation.DoesNotExist: field_value = TextRegistrationInformation() except IntegerRegistrationInformation.DoesNotExist: field_value = IntegerRegistrationInformation() field_value.registration = registration field_value.field = self field_value.value = value field_value.save()
def __str__(self): return "{} ({})".format(self.name, dict(self.FIELD_TYPES)[self.type]) class Meta: order_with_respect_to = "event"
[docs]class AbstractRegistrationInformation(models.Model): """Abstract to contain common things for registration information""" registration = models.ForeignKey(EventRegistration, models.CASCADE) field = models.ForeignKey(RegistrationInformationField, models.CASCADE) changed = models.DateTimeField(_("last changed"), auto_now=True) def __str__(self): return "{} - {}: {}".format(self.registration, self.field, self.value)
[docs] class Meta: abstract = True
[docs]class BooleanRegistrationInformation(AbstractRegistrationInformation): """Checkbox information filled in by members when registering""" value = models.BooleanField()
[docs]class TextRegistrationInformation(AbstractRegistrationInformation): """Checkbox information filled in by members when registering""" value = models.TextField()
[docs]class IntegerRegistrationInformation(AbstractRegistrationInformation): """Checkbox information filled in by members when registering""" value = models.IntegerField()