I'm not crazy about passing the report all over. It might make sense to return error messages like `details_report` does and drop the truth-checking methods. Renaming the "report" methods to "error" methods should make it obvious if you just check for emptiness what is going on.

```python
# I don't know what to call the "fully_complete_errors" method.
# This method would essentially be `incomplete_msgs`.
errors = self.object.all_errors()
if errors:
    raise serializers.ValidationError(errors)
```