Why not validate the keyword before insertion?
> It would make a big trouble if the keyword is the typo.

Yes, that's a valid point.

> Charfield would accept all kinds of types other than basestring
> BooleanField would accept all kinds of types other than Boolean

The `python_value` and `db_value` functions on field ensure that the correct types are passed when reading rows from the database, and vice-versa.
 Is it valuable to add in a keyword validation in case of typo as sqlalchemy?
 A `KeyError` will be raised if you try to insert data into a non-existant field, though this happens at execution time rather than the time the insert is instantiated. I think this is sufficient and will leave the logic as-is.
 But if birthday is optional field and when try to insert, a birthdays typo happened, this field would be ignored, but it should not be!

I can't find the keyerror in this case. 
 https://github.com/coleifer/peewee/blob/706c9d8e67f22f8610142dcaf2e37829f3f9d138/peewee.py#L2556-L2582

Particularly 2560.
 The code in my example would work in peewee, and would not give keyerror at all.
This keyerror will check the insert keyword? 

```
class Person(BaseModel):
    name = CharField()
    birthday = DateField()
    is_relative = BooleanField()
uncle_bob = Person(name={1:2}, birthday="1910/10/11", is_relative="a", stupid="bas")
uncle_bob.save()
```

It would just work. Eventhough there is no `foo` field in the Model. 
The insert way is to ignore any `NOT defined` keywords before insert into table.  
It would make a big trouble if the keyword is the typo.

BTW1:  sqlalchemy would give 

```
TypeError: 'stupid' is an invalid keyword argument for Person
```

BTW2:
`Charfield` would accept all kinds of types other than `basestring`
`BooleanField` would accept all kinds of types other than `Boolean`
I just wondering is there any reason?
If the type checking is optional, then which interface to use?
