如何只调用一次修改相关字段的bulk_update

问题描述 投票:0回答:1

我正在使用两个表来更改其中的一些数据,但我想避免使用

bulk_update
进行两次调用,如下所示:

queryset = MyModel.objects.all()
submodels_to_update = []
for instance in queryset:
    instance.submodel = process()
    instance.submodel.sub_property = some_random_data()
    submodels_to_update.append(instance.submodel)

MyModel.objects.bulk_update(queryset, ['submodel'])
SubModel.objects.bulk_update(submodels_to_update, ['sub_property'])

我想做的是类似下面的事情:

MyModel.objects.bulk_update(queryset, ['submodel', 'submodel__sub_property'])

但是

bulk_update
似乎不支持使用ORM语法的related_fields。我的问题是,是否有办法同时在两个不同的表中实现
bulk_update

如果答案是不可能的,我没有任何问题可以接受,只需分享相关链接,证明我在这里描述的方法不受支持。

django django-models django-orm
1个回答
0
投票

如文件所示here

此方法有效地更新提供的模型实例上的给定字段,通常使用一个查询,并返回更新的对象数。

注意:

updates the given fields on the provided model instances
它只能更新提供的模型实例上的字段。正如@jerch 所指出的

update()
方法立即应用,对更新的QuerySet的唯一限制是它只能更新模型主表中的列,而不能更新相关模型。“内部bulk_update使用
update
方法,那就是为什么限制。

© www.soinside.com 2019 - 2024. All rights reserved.