1

目前我正在学习 ManyToManyField。我有一个我不完全理解的场景。

例如,这是我的模块。我创建了 3 个帐户,分别为 Jim、Tony 和 Mary

我让用户 Mary 关注 Jim。我可以通过在管理页面的下拉框中单击 Jim 来轻松地让 Mary 关注 Jim。Mary 的 User 对象和 Jim 的用户名。

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
4

2 回答 2

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 添加一个。

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

related_name='followers'意味着您正在命名您的关系followers而不是 Django 生成的名称,否则我认为它会类似于“用户”。IE。您正在赋予它更好的含义和表示您想要实现的目标。

这在文档中得到了很好的解释!

Django 文档多对多字段

于 2013-03-13T12:06:58.127 回答
0
>>> Mary = User.objects.get(username='Mary')
>>> Jim = User.objects.get(username='Jim')
>>> Jim.following.add(Mary)
>>> Jim.save()

Django书中的Django ManyToMany 示例

于 2013-03-13T12:07:32.747 回答