The override guarded on self.code inside create(), which is empty on the model-level recordset, so the branch never ran; it also called a misspelled helper (generate_privakey). Removing it lets the private key be generated during pairing as intended, and keeps copying a provider from regenerating (and thus invalidating) an already paired key.