Django ManyToManyField添加用户

时间:2013-03-13 11:57:34

标签: django

目前我正在学习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

2 个答案:

答案 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但是因为你已经确定它Falsesymmetry你将获得一个,因为你强迫Django添加一个。{/ p >

代码中的含义是您可以user.user_set.all()获取所有相关用户!

related_name='followers'意味着您将命名为followers而不是Django生成的名称,我认为这将是“用户”的行为。 IE浏览器。你赋予它更好的意义和代表你想要达到的目标。

这在文档中解释得非常好!

Django docs ManyToMany-fields

答案 1 :(得分:0)

>>> Mary = User.objects.get(username='Mary')
>>> Jim = User.objects.get(username='Jim')
>>> Jim.following.add(Mary)
>>> Jim.save()
来自django书的

Django ManyToMany example