自我模型上的ManyToMany:如何向此关系添加新实例

时间:2018-07-10 20:34:59

标签: python django django-models

我有一个Profile类,它扩展了User类,并且我希望允许每个profile能够为其他用户个人资料添加书签。

我已经设置了以下内容:

class Profile(models.Model):
     # some fields e.g. name, email
     bookmarked_profiles = models.ManyToManyField("self")

现在,我有些困惑,例如,如何为给定的配置文件实例“标记”新的配置文件?

例如像

# add new bookmark for profile instance
p = Profile.objects.get(pk=1)
profiles_to_bookmark = Profile.objects.all()
p.bookmarked_profiles = profiles_to_bookmark

我还想知道带有书签的个人资料的数量,例如

p.bookmarked_profiles.count()

2 个答案:

答案 0 :(得分:1)

签入Django文档,那里有您需要的一切

  for profile in profiles_to_bookmark:
      p.bookmarked_profiles.add(profile) # WIll add New objects

  p.bookmarked_profiles.all() # Will return all objects

  p.bookmarked_profiles.all().count() # Will return count of objects

https://docs.djangoproject.com/en/2.0/topics/db/examples/many_to_many/ 强文本

答案 1 :(得分:0)

您可以通过ManyToMnayField()中可用的add()添加查询集来做到这一点

p = Profile.objects.get(pk=1)
profiles_to_bookmark = Profile.objects.all()
p.bookmarked_profiles.add(*profiles_to_bookmark) #Note the star *

使用all()可以设置所有带有书签的个人资料,count()将返回总数

p.bookmarked_profiles.all()
p.bookmarked_profiles.count()