Reason #3 on why Django is great

April 25, 2010   

Making custom model fields are a great thing to save a lot of time. If you need a lot of custom validation around your modelforms and don’t want to do a lot of copy and pasting then create a custom model field.

For example, I have the need for a user to input a lot of hostnames and domains and got sick of doing custom validation in each model form I created. So I created a model field for it.

So here it is

class HostnameField(models.CharField):
    def clean(self, value):
        value = super(HostnameField, self).clean(value)

        import re
        regex = re.compile("^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$")
        r = regex.search(string)
        if len(r.groups()) == 0:
            raise models.ValidationError("You need to enter a valid hostname/domain")

        return value

The regex might not be the best, but it seems to cover all the use cases I tried on it.



comments powered by Disqus