Update dependency to dj ~> 4.0

* Refactor query conditionals into clearer "scopes"
* Adjust scopes slightly to better match logic in DJv4
* Changes in scopes seem to fix edge cases broken by me previously
* Trigger a record reload after we perform lock_exclusively