Fix #2484: completely re-implement `Model.create()` in a less convoluted way