Python/Django:如何创建循环来标识所有相关对象

Python/Django:如何创建循环来标识所有相关对象,python,django,recursion,Python,Django,Recursion,我有以下两种型号: class User(AbstractUser): def related_users(self): """Returns list related users if any. Else returns False.""" users1 = RelatedUser.objects.filter(user1=self) if not

我有以下两种型号:

class User(AbstractUser):
    
    def related_users(self):
        """Returns list related users if any. Else returns False."""
        
        users1 = RelatedUser.objects.filter(user1=self)

        if not users1:
            return False

        related_users1 = []
        for related_user in users1:
            related_users1.append(related_user.user2)

        users2 = RelatedUser.objects.filter(user2=self)

        if not users2:
            return False

        related_users2 = []
        for related_user in users2:
            related_users2.append(related_user.user1)

        related_users = list(set(related_users1 + related_users2))
        if self in related_users:
            related_users.remove(self)
        
        return related_users
        
class RelatedUser(models.Model):
    """Identifies which users are related."""
    user1 = models.ForeignKey("User", on_delete=models.CASCADE, related_name="related_users_1")
    user2 = models.ForeignKey("User", on_delete=models.CASCADE, related_name="related_users_2")
考虑以下相关用户对象:

  • user1=a,user2=b
  • user1=a,user2=c
  • user1=d,user2=b
现在假设我执行
a.related\u users()

这将返回一个列表
[b,c]

然而,我们可以看到所有相关的用户对象都是间接相关的。如何修改
相关用户()
以合并此功能?因此,在上述情况下,列表是
[b,c,d]

我一直无法想出一个递归或其他函数来实现这一点