Update get_or_create method and its tests
This commit is contained in:
@ -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":
|
||||
"""
|
||||
|
||||
@ -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":
|
||||
"""
|
||||
|
||||
@ -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():
|
||||
|
||||
Reference in New Issue
Block a user