mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #6707 -- Added RelatedManager.set() and made descriptors' __set__ use it.
Thanks Anssi Kääriäinen, Carl Meyer, Collin Anderson, and Tim Graham for the reviews.
This commit is contained in:
@@ -246,6 +246,58 @@ class GenericRelationsTests(TestCase):
|
||||
self.comp_func
|
||||
)
|
||||
|
||||
def test_set(self):
|
||||
bacon = Vegetable.objects.create(name="Bacon", is_yucky=False)
|
||||
fatty = bacon.tags.create(tag="fatty")
|
||||
salty = bacon.tags.create(tag="salty")
|
||||
|
||||
bacon.tags.set([fatty, salty])
|
||||
self.assertQuerysetEqual(bacon.tags.all(), [
|
||||
"<TaggedItem: fatty>",
|
||||
"<TaggedItem: salty>",
|
||||
])
|
||||
|
||||
bacon.tags.set([fatty])
|
||||
self.assertQuerysetEqual(bacon.tags.all(), [
|
||||
"<TaggedItem: fatty>",
|
||||
])
|
||||
|
||||
bacon.tags.set([])
|
||||
self.assertQuerysetEqual(bacon.tags.all(), [])
|
||||
|
||||
bacon.tags.set([fatty, salty], clear=True)
|
||||
self.assertQuerysetEqual(bacon.tags.all(), [
|
||||
"<TaggedItem: fatty>",
|
||||
"<TaggedItem: salty>",
|
||||
])
|
||||
|
||||
bacon.tags.set([fatty], clear=True)
|
||||
self.assertQuerysetEqual(bacon.tags.all(), [
|
||||
"<TaggedItem: fatty>",
|
||||
])
|
||||
|
||||
bacon.tags.set([], clear=True)
|
||||
self.assertQuerysetEqual(bacon.tags.all(), [])
|
||||
|
||||
def test_assign(self):
|
||||
bacon = Vegetable.objects.create(name="Bacon", is_yucky=False)
|
||||
fatty = bacon.tags.create(tag="fatty")
|
||||
salty = bacon.tags.create(tag="salty")
|
||||
|
||||
bacon.tags = [fatty, salty]
|
||||
self.assertQuerysetEqual(bacon.tags.all(), [
|
||||
"<TaggedItem: fatty>",
|
||||
"<TaggedItem: salty>",
|
||||
])
|
||||
|
||||
bacon.tags = [fatty]
|
||||
self.assertQuerysetEqual(bacon.tags.all(), [
|
||||
"<TaggedItem: fatty>",
|
||||
])
|
||||
|
||||
bacon.tags = []
|
||||
self.assertQuerysetEqual(bacon.tags.all(), [])
|
||||
|
||||
def test_assign_with_queryset(self):
|
||||
# Ensure that querysets used in reverse GFK assignments are pre-evaluated
|
||||
# so their value isn't affected by the clearing operation in
|
||||
|
||||
Reference in New Issue
Block a user