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.