def safer_get_or_create(self, defaults=None, **kw):
        with transaction.atomic():
            try:
                return self.get(**kw), False
            except self.model.DoesNotExist:
                if defaults is not None:
                    kw.update(defaults)
                return self.create(**kw), True
This is subjective, but I don't trust get_or_create until #13906
dataset/ETHPy150Open mozilla/addons-server/src/olympia/amo/models.py/UncachedManagerBase.safer_get_or_create