Fixes a bug that blocks field lookup on creation for ManyToManyFields

I've solved this bug by making the treatment of lookup fields more generic. There were a few `isinstance(field, ForeignKey)` and this was blocking other fields to work properly. One example is that `OneToOneField` was only working by coincidence... I would advise you to does not see the whole diff while revising this PR, but read it commit by commit to understand the steps so you will understand the final solution.