I think you should refer to the `empty_strings_allowed` property of the related field instead of special casing `CharField` here.

```python
if value is None or (value == '' and not related_field.empty_strings_allowed)
```

Not sure an extra `connection.features.interprets_empty_strings_as_nulls` check is also required here.