These days I am trying my hand at a rewrite of Dead Man’s Switch, to add more features and generally improve the service.

One of these features was being able to add multiple emails in the “recipients” field, and I wanted to do this as cleanly as possible, so I decided to create a Django model with custom validation. This was not immediately obvious, as the docs didn’t mention much. Eventually I stumbled across this very thing done in the source, and here is my model class, in the hopes that some of you might find it useful:

class MultipleEmailField(models.CharField):
    description = ugettext_lazy("E-mail address")

    def formfield(self, **kwargs):
        defaults = {
            'form_class': forms.RegexField,
            'regex': emails_re,
            'max_length': self.max_length,
            'error_messages': {
                'invalid': _(u'Enter valid emails, separated by commas.'),
            }
        }
        defaults.update(kwargs)
        return super(MultipleEmailField, self).formfield(**defaults)