Update get_or_create method and its tests

This commit is contained in:
Mojix Coder
2022-02-06 19:14:17 +03:30
parent 2517572a14
commit 4431a643d5
3 changed files with 18 additions and 8 deletions

View File

@ -998,10 +998,8 @@ class QuerySet(Generic[T]):
try:
return await self.get(*args, **kwargs), False
except NoMatch:
if _defaults is None:
return await self.create(**kwargs), True
else:
return await self.create(**kwargs, **_defaults), True
_defaults = _defaults or {}
return await self.create(**{**kwargs, **_defaults}), True
async def update_or_create(self, **kwargs: Any) -> "T":
"""

View File

@ -507,10 +507,8 @@ class QuerysetProxy(Generic[T]):
try:
return await self.get(*args, **kwargs), False
except NoMatch:
if _defaults is None:
return await self.create(**kwargs), True
else:
return await self.create(**kwargs, **_defaults), True
_defaults = _defaults or {}
return await self.create(**{**kwargs, **_defaults}), True
async def update_or_create(self, **kwargs: Any) -> "T":
"""

View File

@ -210,6 +210,20 @@ async def test_get_or_create_with_defaults():
assert book2.genre == "Historic"
assert await Book.objects.count() == 1
book, created = await Book.objects.get_or_create(
title="doesn't exist",
_defaults={"title": "overwritten", "author": "Mojix", "genre": "Historic"},
)
assert created is True
assert book.title == "overwritten"
book2, created = await Book.objects.get_or_create(
title="overwritten", _defaults={"title": "doesn't work"}
)
assert created is False
assert book2.title == "overwritten"
assert book2 == book
@pytest.mark.asyncio
async def test_update_or_create():