Centralize some knowledge of which fields to exclude
authorMagnus Hagander <magnus@hagander.net>
Mon, 11 Jun 2018 14:24:14 +0000 (16:24 +0200)
committerMagnus Hagander <magnus@hagander.net>
Mon, 11 Jun 2018 14:24:14 +0000 (16:24 +0200)
Fields excluded by the ask-something fields is now centralized to the
model, to avoid future repetitions.

postgresqleu/confreg/forms.py
postgresqleu/confreg/migrations/0001_initial.py
postgresqleu/confreg/models.py

index 21774f22ca2e7fd1b4ff7a3b614395dd32d004f5..8b6d93bb147188f4935eec36651f80aa4072b0e6 100644 (file)
@@ -39,18 +39,9 @@ class ConferenceRegistrationForm(forms.ModelForm):
                super(ConferenceRegistrationForm, self).__init__(*args, **kwargs)
                self.user = user
                self.fields['regtype'].queryset = RegistrationType.objects.filter(conference=self.instance.conference).order_by('sortkey')
-               if not self.instance.conference.asktshirt:
-                       del self.fields['shirtsize']
-               if not self.instance.conference.asknick:
-                       del self.fields['nick']
-               if not self.instance.conference.asktwitter:
-                       del self.fields['twittername']
-               else:
-                       self.fields['twittername'].validators.append(TwitterValidator)
-               if not self.instance.conference.askphotoconsent:
-                       del self.fields['photoconsent']
-               else:
-                       self.fields['photoconsent'].required = True
+               self.fields['photoconsent'].required = True
+               for f in self.instance.conference.remove_fields:
+                       del self.fields[f]
 
                if self.regforother:
                        self.fields['email'].widget.attrs['readonly'] = True
index 8c7355c7734743b1b37e8516bddb561995b301fd..33e80fe0339237b247d051d609f1c0088268b95d 100644 (file)
@@ -143,7 +143,7 @@ class Migration(migrations.Migration):
                 ('address', models.TextField(max_length=200, verbose_name=b'Address', blank=True)),
                 ('phone', models.CharField(max_length=100, verbose_name=b'Phone number', blank=True)),
                 ('dietary', models.CharField(max_length=100, verbose_name=b'Special dietary needs', blank=True)),
-                ('twittername', models.CharField(max_length=100, verbose_name=b'Twitter account', blank=True)),
+                ('twittername', models.CharField(max_length=100, verbose_name=b'Twitter account', blank=True, validators=[postgresqleu.util.validators.TwitterValidator])),
                 ('nick', models.CharField(max_length=100, verbose_name=b'Nickname', blank=True)),
                 ('shareemail', models.BooleanField(default=False, verbose_name=b'Share e-mail address with sponsors')),
                 ('payconfirmedat', models.DateField(null=True, verbose_name=b'Payment confirmed', blank=True)),
index 5f553363f929ea979a2168248b603f59b45a0545..dde0db9f6c8137d5b316189acb6eac2f449a7841 100644 (file)
@@ -11,6 +11,7 @@ from django.utils.dateformat import DateFormat
 from django.contrib.postgres.fields import DateTimeRangeField
 
 from postgresqleu.util.validators import validate_lowercase
+from postgresqleu.util.validators import TwitterValidator
 from postgresqleu.util.forms import ChoiceArrayField
 
 from postgresqleu.confreg.dbimage import SpeakerImageStorage
@@ -170,6 +171,17 @@ class Conference(models.Model):
                else:
                        return self.startdate.strftime("%Y-%m-%d")
 
+       @property
+       def remove_fields(self):
+               if not self.asktshirt:
+                       yield 'shirtsize'
+               if not self.asknick:
+                       yield 'nick'
+               if not self.asktwitter:
+                       yield 'twittername'
+               if not self.askphotoconsent:
+                       yield 'photoconsent'
+
        @property
        def pending_session_notifications(self):
                # How many speaker notifications are currently pending for this
@@ -411,7 +423,7 @@ class ConferenceRegistration(models.Model):
        shirtsize = models.ForeignKey(ShirtSize, null=True, blank=True, verbose_name="Preferred T-shirt size")
        dietary = models.CharField(max_length=100, null=False, blank=True, verbose_name="Special dietary needs")
        additionaloptions = models.ManyToManyField(ConferenceAdditionalOption, blank=True, verbose_name="Additional options")
-       twittername = models.CharField(max_length=100, null=False, blank=True, verbose_name="Twitter account")
+       twittername = models.CharField(max_length=100, null=False, blank=True, verbose_name="Twitter account", validators=[TwitterValidator, ])
        nick = models.CharField(max_length=100, null=False, blank=True, verbose_name="Nickname")
        shareemail = models.BooleanField(null=False, blank=False, default=False, verbose_name="Share e-mail address with sponsors")
        photoconsent = models.NullBooleanField(null=True, blank=False, verbose_name="Consent to having your photo taken at the event by the organisers")