mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #23611 -- update_or_create failing from a related manager
Added update_or_create to RelatedManager, ManyRelatedManager and GenericRelatedObjectManager. Added missing get_or_create to GenericRelatedObjectManager.
This commit is contained in:
@@ -35,6 +35,54 @@ class GenericRelationsTests(TestCase):
|
||||
obj.tag, obj.content_type.model_class(), obj.object_id
|
||||
)
|
||||
|
||||
def test_generic_update_or_create_when_created(self):
|
||||
"""
|
||||
Should be able to use update_or_create from the generic related manager
|
||||
to create a tag. Refs #23611.
|
||||
"""
|
||||
count = self.bacon.tags.count()
|
||||
tag, created = self.bacon.tags.update_or_create(tag='stinky')
|
||||
self.assertTrue(created)
|
||||
self.assertEqual(count + 1, self.bacon.tags.count())
|
||||
|
||||
def test_generic_update_or_create_when_updated(self):
|
||||
"""
|
||||
Should be able to use update_or_create from the generic related manager
|
||||
to update a tag. Refs #23611.
|
||||
"""
|
||||
count = self.bacon.tags.count()
|
||||
tag = self.bacon.tags.create(tag='stinky')
|
||||
self.assertEqual(count + 1, self.bacon.tags.count())
|
||||
tag, created = self.bacon.tags.update_or_create(defaults={'tag': 'juicy'}, id=tag.id)
|
||||
self.assertFalse(created)
|
||||
self.assertEqual(count + 1, self.bacon.tags.count())
|
||||
self.assertEqual(tag.tag, 'juicy')
|
||||
|
||||
def test_generic_get_or_create_when_created(self):
|
||||
"""
|
||||
Should be able to use get_or_create from the generic related manager
|
||||
to create a tag. Refs #23611.
|
||||
"""
|
||||
count = self.bacon.tags.count()
|
||||
tag, created = self.bacon.tags.get_or_create(tag='stinky')
|
||||
self.assertTrue(created)
|
||||
self.assertEqual(count + 1, self.bacon.tags.count())
|
||||
|
||||
def test_generic_get_or_create_when_exists(self):
|
||||
"""
|
||||
Should be able to use get_or_create from the generic related manager
|
||||
to get a tag. Refs #23611.
|
||||
"""
|
||||
count = self.bacon.tags.count()
|
||||
tag = self.bacon.tags.create(tag="stinky")
|
||||
self.assertEqual(count + 1, self.bacon.tags.count())
|
||||
tag, created = self.bacon.tags.get_or_create(id=tag.id, defaults={'tag': 'juicy'})
|
||||
self.assertFalse(created)
|
||||
self.assertEqual(count + 1, self.bacon.tags.count())
|
||||
# shouldn't had changed the tag
|
||||
self.assertEqual(tag.tag, 'stinky')
|
||||
|
||||
|
||||
def test_generic_relations_m2m_mimic(self):
|
||||
"""
|
||||
Objects with declared GenericRelations can be tagged directly -- the
|
||||
|
||||
Reference in New Issue
Block a user