多对多字段django以两种方式添加关系
Posted
技术标签:
【中文标题】多对多字段django以两种方式添加关系【英文标题】:Many to many field django add the relationship both way 【发布时间】:2017-05-23 05:50:22 【问题描述】:我正在尝试做一个允许用户关注另一个用户的功能。问题是当我将新用户添加到“关注”时,关注另一个用户的用户也会添加到关注用户的以下列表中。例如,如果用户 a 关注用户 b,我将拥有:
view.py
def follow_test(request):
name = request.POST.get('name', '')
user_followed = Dater.objects.get(username=name)
current_user = Dater.objects.get(id=request.user.id)
print "Current", current_user.followings.all() # display []
print "Followed", user_followed.followings.all() # display []
current_user.followings.add(user_followed)
print "Current", current_user.followings.all() # display <Dater: b>
print "Followed", user_followed.followings.all() # display <Dater: a>
model.py:
followings = models.ManyToManyField('self', blank=True)
我希望用户 b 只添加到 a 的以下内容中
【问题讨论】:
能否请您也打印输出。 【参考方案1】:默认情况下,self 上的多对多关系是对称的。如果您不希望这样,请将symmetrical
设置为 False:
followings = models.ManyToManyField('self', blank=True, symmetrical=False)
见the docs
【讨论】:
【参考方案2】:只需为多对多字段设置related_name="followed_by"。这会将反向映射分配给followed_by
followings = models.ManyToManyField('self', blank=True, symmetrical=False, related_name='followed_by')
【讨论】:
我不太明白您提出的解决方案。我必须设置我的模型吗? 用修改后的模型字段更新了答案。希望有帮助。如果您还有其他问题,请告诉我以上是关于多对多字段django以两种方式添加关系的主要内容,如果未能解决你的问题,请参考以下文章