我有一个设置了 max_length
的字段。当我保存模型实例时,如果该字段的值大于 max_length
,Django 将在数据库级别强制执行 max_length
。(参见 Django 模型文档:http://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.CharField.max_length)
然而,由于我使用的是Postgres,我会收到以下类似的 DatabaseError
异常:
DatabaseError: value too long for type character varying(1000)
我更倾向于自动截断该值(这样就不会出现异常)。现在,我可以手动完成这个操作,但是我真正想要的是让所有的模型都自动截断该值(不一定智能,只需将它截断到第999个字符即可)。
我应该编写一个自定义类,导入models.Model并覆盖save()方法,循环遍历每个_meta.field,检查max_length,然后进行截断吗?这似乎很不优雅,肯定有更好的方法。
.create
(或导致创建的变体,如get_or_create
)之后,内存实例不会被截断。记住这一点是很好的!refresh_from_db
可以正确地显示它被截断了,但是在创建对象后立即刷新对象并不是很好。 - Filipe Pinasave()
方法中添加了Field.get_prep_value()
。 - Filipe Pina