Skip to content

Commit e244d8b

Browse files
adamchainzjacobtylerwalls
authored andcommitted
Refs #28586 - Copied fetch mode in QuerySet.create().
This change allows the pattern `MyModel.objects.fetch_mode(...).create(...)` to set the fetch mode for a new object.
1 parent 6dc9b04 commit e244d8b

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

django/db/models/query.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -683,6 +683,7 @@ def create(self, **kwargs):
683683
obj = self.model(**kwargs)
684684
self._for_write = True
685685
obj.save(force_insert=True, using=self.db)
686+
obj._state.fetch_mode = self._fetch_mode
686687
return obj
687688

688689
create.alters_data = True

tests/basic/tests.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,13 @@ def test_create_method(self):
290290
)
291291
self.assertEqual(Article.objects.get(headline="Article 10"), a10)
292292

293+
def test_create_method_propagates_fetch_mode(self):
294+
article = Article.objects.fetch_mode(models.FETCH_PEERS).create(
295+
headline="Article 10",
296+
pub_date=datetime(2005, 7, 31, 12, 30, 45),
297+
)
298+
self.assertEqual(article._state.fetch_mode, models.FETCH_PEERS)
299+
293300
def test_year_lookup_edge_case(self):
294301
# Edge-case test: A year lookup should retrieve all objects in
295302
# the given year, including Jan. 1 and Dec. 31.

0 commit comments

Comments
 (0)