has_key shouldn't be used as it's not supported by Python3. We should use key in dict instead.
This seems to fix the working test case and I didn't noticed regressions on optionals serializers on my own test suite.

However, unfortunately, this isn't as easy as it seems. initial_data might be a list if the serializer has many=True in which case, depending on the current object, you may or not remove a given field from the validation :(