Django中插入多对多对象的正确方式是什么?

3
我正在处理一个带有额外字段的多对多模型,并查看文档关于多对多关系中的额外字段

在他们的示例中,为了创建成员资格,他们使用以下代码:

m2 = Membership.objects.create(person=paul, group=beatles,date_joined=date(1960, 8, 1), invite_reason= "Wanted to form a band.")

但这意味着他们已经有了“人”和“组”的实例。通常在网站上工作时,我们有对象的ID……所以要创建成员资格,我必须执行以下操作:

person = Person.objects.get(pk=idPerson)
group = Group.objects.get(pk=idgroup)

现在,如果我错了,请纠正我,但是我们不是在插入之前无意义地两次查询数据库吗? 因为在Membership中,我们只需要外键id而不是整个对象... 也许有另一种方法可以仅使用id在多对多关系中进行插入

2个回答

4

您可以使用

Membership.objects.create(person_id=person_id, group_id=group_id)

其中person_id和group_id是您想要链接的对象的ID。


0

那么,你从哪里获取id_personid_group呢?它们不会没有所属的人或组而存在,对吧?我的意思是,要想获得人员的ID,你需要从已经可以访问的人员开始。

在使用Django时,您可以安全地停止以数据库为中心的思考,更多地沿用您手头可用的对象。

无论如何,除非Django遇到绝对必须的点,否则它不会访问数据库。


好的...如果您从表单发送的POST或GET变量中获取id_person和id_group呢?通过Ofri Raviv的答案,我可以创建Membership对象,而无需在每个Person和Group对象上调用“get”方法,这样我就可以确保Django只访问数据库一次。我正在处理数百万行数据,所以我想确保我正在以最有效的方式使用Django =) - pleasedontbelong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接