Jun*_*ung 3 django orm many-to-many django-models m2m
class User(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
gender = models.IntegerField()
email = models.CharField(max_length=100)
password = models.CharField(max_length=255)
following = models.ManyToManyField("self", related_name='followers')
objects = UserManager()
def __repr__(self):
return "User: {0}".format(self.name)
Run Code Online (Sandbox Code Playgroud)
在我的模型User中,用户可以彼此跟随。
我可以找到用户关注的对象:
user1 = User.objects.get(id=1)
following = user1.following.all()
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何找到用户的关注对象。
我试过了:
user1.followers.all()
Run Code Online (Sandbox Code Playgroud)
因为它是我模型中以下字段中的related_name。
有人可以教我该怎么做吗?
非常感谢你。
您应该将symmetrical属性传递为False。
从文档:
Django处理此模型时,会确定其
ManyToManyField本身具有,因此不会followers向User该类添加属性。而是ManyToManyField假定对称-即,如果我是您follower,则您是我follower。如果您不希望与保持多对多关系的对称性
self,请将设置symmetrical为False。这将迫使Django为反向关系添加描述符,从而允许ManyToManyField关系非对称。
在您的情况下:
class User(models.Model):
# ...
following = models.ManyToManyField('self', related_name='followers', symmetrical=False)
# ...
Run Code Online (Sandbox Code Playgroud)
然后,您views.py可以同时访问两个:
following = user.following.all()
followers = user.followers.all()
Run Code Online (Sandbox Code Playgroud)
从现在开始,与的关系self是不对称的。