Django:如何通过同一模型来区分ManyToMany关系

时间:2019-03-06 07:46:25

标签: django django-models

假设User可以阻止其他User。现在,我正在ManyToManyField上工作,它代表被阻止用户的列表。用户也可以停止阻止其他用户。因此,我想创建一个被阻止用户的列表,以便该用户可以停止阻止。
但是,问题是,如果用户A阻止了用户B,则即使用户A将用户B添加到ManyToManyField,阻止的用户列表userB也具有用户A。在这种情况下,如何区分每个用户的关系?

class User(AbstractUser):
    block_users_list = models.ManyToManyField("self", blank=True)

1 个答案:

答案 0 :(得分:2)

您可以为关系设置symmetrical=False,然后尝试使用related_name属性。

class User(AbstractUser):
      block_users_list = models.ManyToManyField("self", blank=True, symmetrical=False, related_name='blocked_by_users')

现在您有两种访问关系的方法:

user = User.objects.get(id=1)
user.block_users_list.all() # Will return the list of users blocked by user
user.blocked_by_users.all() # Will return the list of users who have blocked the current user