Auto-truncating fields at max_length in Django CharFields Auto-truncating fields at max_length in Django CharFields postgresql postgresql

Auto-truncating fields at max_length in Django CharFields


You could create a custom field that auto-truncates the field (I think this code should work, but double-check it):

class TruncatingCharField(models.CharField):    def get_prep_value(self, value):        value = super(TruncatingCharField,self).get_prep_value(value)        if value:            return value[:self.max_length]        return value

Then, instead of using models.CharField in your models.py file, you'd just use TruncatingCharField instead.

get_prep_value prepares the value for a field for insertion in the database, so it's the ideal place to truncate.


Why don't you use a TextField? From the manual:

For large amounts of text, use TextField.


Why don't you use ModelForm. ModelForm enforces a validation, setting its default max_length to model field's max_length property, and raising proper validation error when form.is_valid() is called. That way you don't have to save the form, until form is validated.

Or, if you want to silently pass the validation and truncate suits best to you, write a simple django form, and write a clean method that truncates input string to the max_length and return stripped data. Take data from form.cleaned_data after form is validated and save the object.

All considering the fact, Forms are designed to validate data before going to DB.