是否可以使用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之间的关联?
答案 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