Update get_or_create method and its tests
This commit is contained in:
@ -998,10 +998,8 @@ class QuerySet(Generic[T]):
|
|||||||
try:
|
try:
|
||||||
return await self.get(*args, **kwargs), False
|
return await self.get(*args, **kwargs), False
|
||||||
except NoMatch:
|
except NoMatch:
|
||||||
if _defaults is None:
|
_defaults = _defaults or {}
|
||||||
return await self.create(**kwargs), True
|
return await self.create(**{**kwargs, **_defaults}), True
|
||||||
else:
|
|
||||||
return await self.create(**kwargs, **_defaults), True
|
|
||||||
|
|
||||||
async def update_or_create(self, **kwargs: Any) -> "T":
|
async def update_or_create(self, **kwargs: Any) -> "T":
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -507,10 +507,8 @@ class QuerysetProxy(Generic[T]):
|
|||||||
try:
|
try:
|
||||||
return await self.get(*args, **kwargs), False
|
return await self.get(*args, **kwargs), False
|
||||||
except NoMatch:
|
except NoMatch:
|
||||||
if _defaults is None:
|
_defaults = _defaults or {}
|
||||||
return await self.create(**kwargs), True
|
return await self.create(**{**kwargs, **_defaults}), True
|
||||||
else:
|
|
||||||
return await self.create(**kwargs, **_defaults), True
|
|
||||||
|
|
||||||
async def update_or_create(self, **kwargs: Any) -> "T":
|
async def update_or_create(self, **kwargs: Any) -> "T":
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -210,6 +210,20 @@ async def test_get_or_create_with_defaults():
|
|||||||
assert book2.genre == "Historic"
|
assert book2.genre == "Historic"
|
||||||
assert await Book.objects.count() == 1
|
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
|
@pytest.mark.asyncio
|
||||||
async def test_update_or_create():
|
async def test_update_or_create():
|
||||||
|
|||||||
Reference in New Issue
Block a user