Prevent the silent overwriting of model's attributes e.g. "foo_id" when "foo" foreign key added
I'm kind of curious what kind of model structure you'd have to have to run into this kind of thing... I understand that there may be a bug here, but I'm not sure how you would actually encounter it in practice?
 I run into it not only once, last time we had save parameters from external API call in the model Inherited from the base model. In this case, the log of actions associated with a subscription entity.
Our deveveloper did'nt know the _id thing and just save it like that:

if v.validate(self.message):
    FortumoLog.create(
       subscription = self.subscription
       **self.message)

So about the stucture: we have several log entities for different APIs and one general subscription model.

Nobody has noticed that one of the parameters is not stored (it just stored for history), but sometimes it drove to crashes our flask-admin, only on the prod with disabled debugging.) with some error 
"Failed to find field for filter: %s"
So I think it may save a few hours for someone.
 Fixed 34e56cb887751453680641695bdec1fc6518b2cf

In complex structures with a large number of fields easy to miss the collision, especially if it happened with parrent's model attribute.
Considering that the python dict doesn't guarantee the order of items, there are two possibilities:
1. The *_id attr will be overwritten by ObjectIdDescriptor and will no longer available, but field (if the attr is a field) still will be in _meta.fields. This leads to unexpected and floating bugs.
2. ObjectIdDescriptor will be overwritten by custom attribute. Much less harmful and may be unnoticed for a long time.

I think it should explicitly show the possible issue, by throwing an exception.
