Merge pull request #557 from MojixCoder/master
Update get_or_create method
This commit is contained in:
@ -102,20 +102,25 @@ async def test_queryset_methods():
|
||||
await post.categories.add(news)
|
||||
await post.categories.add(breaking)
|
||||
|
||||
category = await post.categories.get_or_create(name="News")
|
||||
category, created = await post.categories.get_or_create(name="News")
|
||||
assert category == news
|
||||
assert len(post.categories) == 1
|
||||
assert created is False
|
||||
|
||||
category = await post.categories.get_or_create(name="Breaking News")
|
||||
category, created = await post.categories.get_or_create(
|
||||
name="Breaking News"
|
||||
)
|
||||
assert category != breaking
|
||||
assert category.pk is not None
|
||||
assert len(post.categories) == 2
|
||||
assert created is True
|
||||
|
||||
await post.categories.update_or_create(pk=category.pk, name="Urgent News")
|
||||
assert len(post.categories) == 2
|
||||
cat = await post.categories.get_or_create(name="Urgent News")
|
||||
cat, created = await post.categories.get_or_create(name="Urgent News")
|
||||
assert cat.pk == category.pk
|
||||
assert len(post.categories) == 1
|
||||
assert created is False
|
||||
|
||||
await post.categories.remove(cat)
|
||||
await cat.delete()
|
||||
|
||||
@ -166,17 +166,18 @@ async def test_delete_and_update():
|
||||
@pytest.mark.asyncio
|
||||
async def test_get_or_create():
|
||||
async with database:
|
||||
tom = await Book.objects.get_or_create(
|
||||
tom, created = await Book.objects.get_or_create(
|
||||
title="Volume I", author="Anonymous", genre="Fiction"
|
||||
)
|
||||
assert await Book.objects.count() == 1
|
||||
assert created is True
|
||||
|
||||
assert (
|
||||
await Book.objects.get_or_create(
|
||||
title="Volume I", author="Anonymous", genre="Fiction"
|
||||
)
|
||||
== tom
|
||||
second_tom, created = await Book.objects.get_or_create(
|
||||
title="Volume I", author="Anonymous", genre="Fiction"
|
||||
)
|
||||
|
||||
assert second_tom.pk == tom.pk
|
||||
assert created is False
|
||||
assert await Book.objects.count() == 1
|
||||
|
||||
assert await Book.objects.create(
|
||||
@ -188,6 +189,42 @@ async def test_get_or_create():
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_get_or_create_with_defaults():
|
||||
async with database:
|
||||
book, created = await Book.objects.get_or_create(
|
||||
title="Nice book", _defaults={"author": "Mojix", "genre": "Historic"}
|
||||
)
|
||||
assert created is True
|
||||
assert book.author == "Mojix"
|
||||
assert book.title == "Nice book"
|
||||
assert book.genre == "Historic"
|
||||
|
||||
book2, created = await Book.objects.get_or_create(
|
||||
author="Mojix", _defaults={"title": "Book2"}
|
||||
)
|
||||
assert created is False
|
||||
assert book2 == book
|
||||
assert book2.title == "Nice book"
|
||||
assert book2.author == "Mojix"
|
||||
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():
|
||||
async with database:
|
||||
|
||||
@ -87,22 +87,26 @@ async def test_quering_by_reverse_fk():
|
||||
assert await album.tracks.exists()
|
||||
assert await album.tracks.count() == 3
|
||||
|
||||
track = await album.tracks.get_or_create(
|
||||
track, created = await album.tracks.get_or_create(
|
||||
title="The Bird", position=1, play_count=30
|
||||
)
|
||||
assert track == track1
|
||||
assert created is False
|
||||
assert len(album.tracks) == 1
|
||||
|
||||
track = await album.tracks.get_or_create(
|
||||
title="The Bird2", position=4, play_count=5
|
||||
track, created = await album.tracks.get_or_create(
|
||||
title="The Bird2", _defaults={"position": 4, "play_count": 5}
|
||||
)
|
||||
assert track != track1
|
||||
assert created is True
|
||||
assert track.pk is not None
|
||||
assert track.position == 4 and track.play_count == 5
|
||||
assert len(album.tracks) == 2
|
||||
|
||||
await album.tracks.update_or_create(pk=track.pk, play_count=50)
|
||||
assert len(album.tracks) == 2
|
||||
track = await album.tracks.get_or_create(title="The Bird2")
|
||||
track, created = await album.tracks.get_or_create(title="The Bird2")
|
||||
assert created is False
|
||||
assert track.play_count == 50
|
||||
assert len(album.tracks) == 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user