如何以最少的数据库点击次数将多个实例添加到 Django 反向外键集?

Posted

技术标签:

【中文标题】如何以最少的数据库点击次数将多个实例添加到 Django 反向外键集?【英文标题】:How can I add multiple instances to a Django reverse foreign key set in a minimal number of hits to the database? 【发布时间】:2013-09-27 01:30:18 【问题描述】:

例如,我有两个模型:

class Person(models.Model):
    name = models.CharField(max_length=100)

class Job(models.Model):
    title = models.CharField(max_length=100)
    person = models.ForeignKey(Person)

我有一个工作 ID 列表--

job_ids = [1, 2, ....] 

是作业模型实例的pks

我知道我能做到--

for id in job_ids:
    person.jobs.add(job_id)

但这会比我能做的要多得多--

person.jobs.add(job_ids)

它将解压列表并使用 bulk_create。我该怎么做呢?谢谢。

【问题讨论】:

【参考方案1】:

你试过了吗

person.jobs.add(*job_ids)

在我的例子中,我使用了一个过滤查询并且有一个对象列表(而不是 ID)。我收到类似于

的错误
TypeError: 'MyModel' instance expected, got [<MyModel: MyModel Object>]

...在我加入星号之前。

credit (another SO question)

【讨论】:

以上是关于如何以最少的数据库点击次数将多个实例添加到 Django 反向外键集?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用javascript找到从A点到B点完成这项工作的最少旅行次数?

将查看次数添加到网站上的外部链接

将数列变为有序的最少交换次数

如何计算按钮的点击次数并保存在 MySql 数据库中?新会话中的点击应添加到现有值

如何在矩阵中移动以使用最少的移动次数达到目标

将数组3,7,1,6,2,4,8,5中的元素从大到小的顺序排列,每次可以任意交换两个元素,求最少的交换次数。