I would say this would be a cool use case for [`get_or_create`](https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.get_or_create), except that would mean it would get saved twice, which is inefficient. It could be good to add a static method to the SyncedModel class called `get_or_initialize`, which does the same thing without saving. If it uses kwargs, then they can just be passed down into the `cls` to create a new instance in the case that it wasn't found. This would also allow us to override this method and optimize the lookup for cases where the provided kwargs are enough to generate the UUID.