mirror of
https://github.com/django/django.git
synced 2025-10-24 14:16: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:
@@ -80,11 +80,49 @@ class ManyToOneTests(TestCase):
|
||||
"<Article: This is a test>",
|
||||
])
|
||||
|
||||
def test_set(self):
|
||||
new_article = self.r.article_set.create(headline="John's second story",
|
||||
pub_date=datetime.date(2005, 7, 29))
|
||||
new_article2 = self.r2.article_set.create(headline="Paul's story",
|
||||
pub_date=datetime.date(2006, 1, 17))
|
||||
|
||||
# Assign the article to the reporter.
|
||||
new_article2.reporter = self.r
|
||||
new_article2.save()
|
||||
self.assertEqual(repr(new_article2.reporter), "<Reporter: John Smith>")
|
||||
self.assertEqual(new_article2.reporter.id, self.r.id)
|
||||
self.assertQuerysetEqual(self.r.article_set.all(), [
|
||||
"<Article: John's second story>",
|
||||
"<Article: Paul's story>",
|
||||
"<Article: This is a test>",
|
||||
])
|
||||
self.assertQuerysetEqual(self.r2.article_set.all(), [])
|
||||
|
||||
# Set the article back again.
|
||||
self.r2.article_set.set([new_article, new_article2])
|
||||
self.assertQuerysetEqual(self.r.article_set.all(), ["<Article: This is a test>"])
|
||||
self.assertQuerysetEqual(self.r2.article_set.all(),
|
||||
[
|
||||
"<Article: John's second story>",
|
||||
"<Article: Paul's story>",
|
||||
])
|
||||
|
||||
# Funny case - because the ForeignKey cannot be null,
|
||||
# existing members of the set must remain.
|
||||
self.r.article_set.set([new_article])
|
||||
self.assertQuerysetEqual(self.r.article_set.all(),
|
||||
[
|
||||
"<Article: John's second story>",
|
||||
"<Article: This is a test>",
|
||||
])
|
||||
self.assertQuerysetEqual(self.r2.article_set.all(), ["<Article: Paul's story>"])
|
||||
|
||||
def test_assign(self):
|
||||
new_article = self.r.article_set.create(headline="John's second story",
|
||||
pub_date=datetime.date(2005, 7, 29))
|
||||
new_article2 = self.r2.article_set.create(headline="Paul's story",
|
||||
pub_date=datetime.date(2006, 1, 17))
|
||||
|
||||
# Assign the article to the reporter directly using the descriptor.
|
||||
new_article2.reporter = self.r
|
||||
new_article2.save()
|
||||
@@ -96,6 +134,7 @@ class ManyToOneTests(TestCase):
|
||||
"<Article: This is a test>",
|
||||
])
|
||||
self.assertQuerysetEqual(self.r2.article_set.all(), [])
|
||||
|
||||
# Set the article back again using set descriptor.
|
||||
self.r2.article_set = [new_article, new_article2]
|
||||
self.assertQuerysetEqual(self.r.article_set.all(), ["<Article: This is a test>"])
|
||||
|
||||
Reference in New Issue
Block a user