For the use case above, I had an epiphany did some more experimenting and figured out how to update the audit fields without needing to mangle a Form/ModelForm, entirely from the CBV:
def form_valid(self, form):
form.instance.updated_by = self.request.user
return super().form_valid(form)
Fully compatible with an implicit ModelForm, and only 3 lines of code!
This is an easy drop in a view mixin, which I already have for other overrides anyway. However, this feels really gross, and I feel like I'm violating some prime directive by attaching data to an instance that was not validated by the form. I think I can forgive myself since the data I'm attaching is coming from Django and not some other source, and I have to assume Django handles these things properly.
Of course while writing this message, I then stumbled on this exact solution buried in the Django docs:
So, feel free to ignore me. I will grant myself a point for coming up with the same solution already blessed by the Django devs. I'm also deducting a point from myself for not RTFM properly, so I break even.
-James