{"record":{"id":"21ad0fa1c7685071","repo":"HumanSignal/label-studio","slug":"no-memberships-found-for-user-user","errorCode":null,"errorMessage":"No memberships found for user {user}","messagePattern":"No memberships found for user (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"label_studio/organizations/models.py","lineNumber":130,"sourceCode":"\n    created_at = models.DateTimeField(_('created at'), auto_now_add=True)\n    updated_at = models.DateTimeField(_('updated at'), auto_now=True)\n\n    contact_info = models.EmailField(_('contact info'), blank=True, null=True)\n\n    def __str__(self):\n        return self.title + ', id=' + str(self.pk)\n\n    @classmethod\n    def create_organization(cls, created_by=None, title='Your Organization', **kwargs):\n        _create_organization = load_func(settings.CREATE_ORGANIZATION)\n        return _create_organization(title=title, created_by=created_by, **kwargs)\n\n    @classmethod\n    def find_by_user(cls, user, check_deleted=False):\n        memberships = OrganizationMember.objects.filter(user=user).prefetch_related('organization')\n        if not memberships.exists():\n            raise ValueError(f'No memberships found for user {user}')\n        membership = memberships.first()\n        if check_deleted:\n            return (membership.organization, True) if membership.deleted_at else (membership.organization, False)\n\n        return membership.organization\n\n    @classmethod\n    def find_by_invite_url(cls, url):\n        token = url.strip('/').split('/')[-1]\n        if len(token):\n            return Organization.objects.get(token=token)\n        else:\n            raise KeyError(f\"Can't find Organization by welcome URL: {url}\")\n\n    def has_user(self, user):\n        return self.users.filter(pk=user.pk).exists()\n\n    def has_deleted(self, user):","sourceCodeStart":112,"sourceCodeEnd":148,"githubUrl":"https://github.com/HumanSignal/label-studio/blob/0b49e9b53917880baf1dd85d574fe5541a9aafb2/label_studio/organizations/models.py#L112-L148","documentation":"Organization.find_by_user looks up the OrganizationMember rows for a user and raises ValueError if the user has no membership in any organization. Label Studio expects every active user to belong to at least one organization, so an account without memberships cannot resolve an active organization.","triggerScenarios":"Calling Organization.find_by_user(user) when OrganizationMember.objects.filter(user=user).exists() is False — e.g. user was deleted from their only organization, was soft-deleted everywhere, or was created without a default org.","commonSituations":"Users removed from their sole organization then logging in; scripts creating users directly in the DB bypassing org creation hooks; test fixtures with users but no memberships; user accounts imported from backups without membership rows.","solutions":["Check the user has at least one OrganizationMember row before calling find_by_user","Re-create the membership: OrganizationMember.objects.create(user=user, organization=org)","Invite the user to an organization via the API to create the membership","If the user should be self-hosted solo, create a new organization for them"],"exampleFix":"// before\norg = Organization.find_by_user(user)\n// after\nif OrganizationMember.objects.filter(user=user).exists():\n    org = Organization.find_by_user(user)\nelse:\n    org = _create_organization(title=f\"{user.email}'s organization\", created_by=user)","handlingStrategy":"try-catch","validationCode":"if not OrganizationMember.objects.filter(user=user).exists():\n    raise Skip(\"user has no organization membership\")","typeGuard":null,"tryCatchPattern":"try:\n    org = Organization.find_by_user(user)\nexcept ValueError:\n    org = _create_organization(title=f\"{user.email}'s org\", created_by=user)","preventionTips":["Always create a default org when creating users in scripts","Use official signup APIs that create memberships","Check membership existence in test fixtures","Restore membership rows when importing users from backups"],"tags":["django","orm","user-management"],"backgroundTag":"no-membership-found","analyzedSha":"0b49e9b53917880baf1dd85d574fe5541a9aafb2","analyzedAt":"2026-08-29T00:39:52.578Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}