mirror of
https://github.com/django/django.git
synced 2024-12-23 09:36:06 +00:00
6789ded0a6
Thanks to Adam Johnson, Carlton Gibson, Mariusz Felisiak, and Raphael Michel for mentoring this Google Summer of Code 2019 project and everyone else who helped with the patch. Special thanks to Mads Jensen, Nick Pope, and Simon Charette for extensive reviews. Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com>
34 lines
1.4 KiB
Python
34 lines
1.4 KiB
Python
from datetime import date
|
|
|
|
from . import PostgreSQLTestCase
|
|
from .models import (
|
|
HStoreModel, IntegerArrayModel, NestedIntegerArrayModel,
|
|
NullableIntegerArrayModel, OtherTypesArrayModel, RangesModel,
|
|
)
|
|
|
|
try:
|
|
from psycopg2.extras import NumericRange, DateRange
|
|
except ImportError:
|
|
pass # psycopg2 isn't installed.
|
|
|
|
|
|
class BulkSaveTests(PostgreSQLTestCase):
|
|
def test_bulk_update(self):
|
|
test_data = [
|
|
(IntegerArrayModel, 'field', [], [1, 2, 3]),
|
|
(NullableIntegerArrayModel, 'field', [1, 2, 3], None),
|
|
(NestedIntegerArrayModel, 'field', [], [[1, 2, 3]]),
|
|
(HStoreModel, 'field', {}, {1: 2}),
|
|
(RangesModel, 'ints', None, NumericRange(lower=1, upper=10)),
|
|
(RangesModel, 'dates', None, DateRange(lower=date.today(), upper=date.today())),
|
|
(OtherTypesArrayModel, 'ips', [], ['1.2.3.4']),
|
|
(OtherTypesArrayModel, 'json', [], [{'a': 'b'}])
|
|
]
|
|
for Model, field, initial, new in test_data:
|
|
with self.subTest(model=Model, field=field):
|
|
instances = Model.objects.bulk_create(Model(**{field: initial}) for _ in range(20))
|
|
for instance in instances:
|
|
setattr(instance, field, new)
|
|
Model.objects.bulk_update(instances, [field])
|
|
self.assertSequenceEqual(Model.objects.filter(**{field: new}), instances)
|