使用Django ManyToMany对称属性建立传递依赖

时间:2018-09-21 19:08:28

标签: python django django-models many-to-many manytomanyfield

是否可以使用symmetrical中的models.ManyToManyField属性,以便在记录之间创建可传递依赖项?

例如,在我的代码中,我有:

class User(models.Model):
    website = models.ForeignKey('myapp.Website')
    related_users = models.ManyToManyField('self', related_name='users', symmetrical=True)

当我这样做时:

user_a.related_users.add(user_b)
user_a.related_users.all() # returns the user B
user_b.related_users.all() # returns the user A

一切正常,这里的关系是对称的。

但是当我这样做时:

user_b.related_users.add(user_c)
user_b.related_users.all() # returns user A and user C
user_c.related_users.all() # returns user B

我希望用户C自动返回用户A和用户B,因为用户C是用户B,也就是用户A,因此用户C也是用户A。

是否有可能做到这一点,还是必须手动添加用户A和用户C之间的关联?

1 个答案:

答案 0 :(得分:0)

一种简单的解决方案是编写一个自定义管理器,如果您只是想深入了解一个层次,可以按照以下方法进行操作

class UserManager(models.Manager):
    def two_level_related(self):
        all_related = self.related_users.all()
        for related_user in self.related_users.all():
            all_related.union(related_user.related_users.all())
        return all_related