The `validate_field`'s contract is that it's first argument is an object with `add` method. A list is not allowed. This class was previously defined here: https://github.com/django/django/blob/master/django/core/management/validation.py#L11.

I don't understand your last question. The point is that new `check_field` method calls old `validate_field` method (for backward compatibility) and convert the result (`ErrorList` of strings) into the new format (list of `CheckMessage` instances). Old code overriding `validate_field` method will still work. If somebody want's to add new validation stuff, they can override `validate_field` or `check_field` (of course, the latter is preferred).