You say you want to do the clean in the model but then say you want
the error to be associated with the field in the ModelForm? If you
need that clean functionality to exist for both a model and a form of
that model then you could shift the checks into a function of it's own
out side of the class's then have a clean in both the model and the
form which calls the function to do the checks before deciding how to
raise the error.
The issue is that a form and a model use validation errors in
different ways. A form will send errors back to the templating layer
to show to a user but a model doesn't work like that as it would only
be manipulated directly in python code.
Does that make sense?