どのようにすれば `bulk_update` で複数のモデルオブジェクトを一度に更新できるか

たくさんのモデルオブジェクトを一度更新するために bulk_update を使用できます。bulk_update を使用するコードの例は以下のとおりです。

from django.db.models import F
from django.db.models.expressions import Case, When
from django.db.models.query import QuerySet
# 定义一个更新函数
def update_objects(objects: QuerySet):
# 创建一个Case对象,以便为每个对象构建更新表达式
cases = [When(pk=obj.pk, then=Case(When(quantity__gt=0, then=F('quantity') - 1), default=F('quantity'))) for obj in objects]
# 使用bulk_update方法进行一次性更新
MyModel.objects.bulk_update(objects, [F('quantity')], cases=cases)
# 获取要更新的对象列表
objects = MyModel.objects.filter(id__in=[1, 2, 3])
# 调用更新函数
update_objects(objects)

上記のコード例では、更新対象のモデルオブジェクトのリストを受け取るupdate_objects関数を定義しました。次に、それぞれのモデルオブジェクトに対する更新式を構築するために、CaseとWhenを使用し、各Whenオブジェクトを持つケースのリストを作成しました。最後に、これらのモデルオブジェクトを一括で更新するために、bulk_updateメソッドを呼び出しています。ここでFオブジェクトを使用してモデルフィールドを参照していることに注意してください。これにより更新式内で計算を行うことができます。

bannerAds