目前我正在学习ManyToManyField。我有一个我完全不理解的场景。
例如,这是我的模块。我创建了3个名为Jim,Tony和Mary的帐户
我让用户玛丽跟随吉姆。我可以通过点击管理页面下拉框中的吉姆来轻松地让玛丽跟随吉姆 我一直试图弄清楚如何使用shell提示符下的manytomanyfield仅使用这些信息让Mary跟随jim。 Mary的User对象 和吉姆的用户名。
Mary = User.objects.get(username='Mary')
Jim = User.objects.get(username='Jim')
我怎样才能让玛丽跟随吉姆?就像在管理页面中一样
class Person(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=100, blank=True)
following = models.ManyToManyField('self', related_name='followers', symmetrical=False, blank=True, null=True)
def __unicode__(self):
return self.name
答案 0 :(得分:3)
mary = User.objects.get(username='Mary')
jim = User.objects.get(username='Jim')
#just make sure your user is saved before adding the relationship.
jim.following.add(mary)
jim.save()
在指定您对额外字段所做的事情时,基本上描述了您希望关系如何发挥作用。
这个models.ManyToManyField()
在幕后做的是创建一个中间数据库表,通常看起来像这个“app_model1_model2”,命名可能会关闭,但你明白了。
self
意味着您正在定义与同一模型的关系,这是正确的。
因此,你不会得到user_set
但是因为你已经确定它False
中symmetry
你将获得一个,因为你强迫Django添加一个。{/ p >
代码中的含义是您可以user.user_set.all()
获取所有相关用户!
related_name='followers'
意味着您将命名为followers
而不是Django生成的名称,我认为这将是“用户”的行为。
IE浏览器。你赋予它更好的意义和代表你想要达到的目标。
这在文档中解释得非常好!
答案 1 :(得分:0)
>>> Mary = User.objects.get(username='Mary')
>>> Jim = User.objects.get(username='Jim')
>>> Jim.following.add(Mary)
>>> Jim.save()
来自django书的