1

DjangoQuerySet.updateは を処理せずtransaction.commit_manually、自動的にコミットします。

このようなカスタマイズされたdjangoビューを作成しました...

クラス Foo(ビュー)

@method_decorator(transaction.commit_manually)
def post(self, request, *args, **kwargs):
    try:
        Model.objects.all().update(rank=10)
        data_to_update = resquest.
        for d in data_to_update:
            model = Model.objects.get(pk=d['id'])
            model.rank = d['rank']
            model.save()
        transaction.commit()
        status_code = 200
    except Exception, e:
        # do some stuff
        transaction.rollback()
        status_code = 500

    return HttpResponse(content='Foo', status=status_code)

...そして、 の後に期待が高まるとModel.objects.all().update(rank=10)transaction.rollback()は適切に機能せず、すべてのモデルでランクが 10に設定されます。
なぜそれが起こるのかわかりません。また、すべてのモデルで反復することはできません。それぞれにsaveメソッドを呼び出します(パフォーマンス上の理由)。

4

0 に答える 0