django-fullclean icon indicating copy to clipboard operation
django-fullclean copied to clipboard

Selectively disable full clean in performance-critical code

Open sjamaan opened this issue 4 years ago • 3 comments

Hi there,

This is a great little package, we're using it in most of our projects at work. It certainly improves stability a lot by always enforcing that validations are run. However, lately I've noticed in a performance-critical piece of code some validations cause extra database queries (mostly those where we use uniqueness constraints). In these situations I also know that these constraints won't be violated for existing records where we're just updating some timestamp fields and such.

Since I don't want to disable full clean and go back to manually calling full_clean everywhere (which is very error-prone), I'm currently resorting to manually building an update statement with Case to completely bypass Django validations in these critical sections, but this is fiddly and results in a lot of extra code that I think isn't really necessary. It would be helpful if there were something like a context manager or some flag you can pass to save() to tell it to skip full clean.

sjamaan avatar Apr 02 '20 17:04 sjamaan