mirror of
https://github.com/django/django.git
synced 2025-01-03 06:55:47 +00:00
Refs #26678 -- Added tests for using the field the relation points to with RelatedManager.add()/remove()/set().
This commit is contained in:
parent
a44a21a22f
commit
0e2ed4fdd1
@ -38,6 +38,7 @@ class Article(models.Model):
|
|||||||
# correctly created. Refs #20207
|
# correctly created. Refs #20207
|
||||||
publications = models.ManyToManyField(Publication, name='publications')
|
publications = models.ManyToManyField(Publication, name='publications')
|
||||||
tags = models.ManyToManyField(Tag, related_name='tags')
|
tags = models.ManyToManyField(Tag, related_name='tags')
|
||||||
|
authors = models.ManyToManyField('User', through='UserArticle')
|
||||||
|
|
||||||
objects = NoDeletedArticleManager()
|
objects = NoDeletedArticleManager()
|
||||||
|
|
||||||
@ -48,6 +49,18 @@ class Article(models.Model):
|
|||||||
return self.headline
|
return self.headline
|
||||||
|
|
||||||
|
|
||||||
|
class User(models.Model):
|
||||||
|
username = models.CharField(max_length=20, unique=True)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.username
|
||||||
|
|
||||||
|
|
||||||
|
class UserArticle(models.Model):
|
||||||
|
user = models.ForeignKey(User, models.CASCADE, to_field='username')
|
||||||
|
article = models.ForeignKey(Article, models.CASCADE)
|
||||||
|
|
||||||
|
|
||||||
# Models to test correct related_name inheritance
|
# Models to test correct related_name inheritance
|
||||||
class AbstractArticle(models.Model):
|
class AbstractArticle(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -3,7 +3,9 @@ from unittest import mock
|
|||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.test import TestCase, skipUnlessDBFeature
|
from django.test import TestCase, skipUnlessDBFeature
|
||||||
|
|
||||||
from .models import Article, InheritedArticleA, InheritedArticleB, Publication
|
from .models import (
|
||||||
|
Article, InheritedArticleA, InheritedArticleB, Publication, User,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ManyToManyTests(TestCase):
|
class ManyToManyTests(TestCase):
|
||||||
@ -76,6 +78,32 @@ class ManyToManyTests(TestCase):
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_add_remove_set_by_pk(self):
|
||||||
|
a5 = Article.objects.create(headline='Django lets you create Web apps easily')
|
||||||
|
a5.publications.add(self.p1.pk)
|
||||||
|
self.assertQuerysetEqual(
|
||||||
|
a5.publications.all(),
|
||||||
|
['<Publication: The Python Journal>'],
|
||||||
|
)
|
||||||
|
a5.publications.set([self.p2.pk])
|
||||||
|
self.assertQuerysetEqual(
|
||||||
|
a5.publications.all(),
|
||||||
|
['<Publication: Science News>'],
|
||||||
|
)
|
||||||
|
a5.publications.remove(self.p2.pk)
|
||||||
|
self.assertQuerysetEqual(a5.publications.all(), [])
|
||||||
|
|
||||||
|
def test_add_remove_set_by_to_field(self):
|
||||||
|
user_1 = User.objects.create(username='Jean')
|
||||||
|
user_2 = User.objects.create(username='Joe')
|
||||||
|
a5 = Article.objects.create(headline='Django lets you create Web apps easily')
|
||||||
|
a5.authors.add(user_1.username)
|
||||||
|
self.assertQuerysetEqual(a5.authors.all(), ['<User: Jean>'])
|
||||||
|
a5.authors.set([user_2.username])
|
||||||
|
self.assertQuerysetEqual(a5.authors.all(), ['<User: Joe>'])
|
||||||
|
a5.authors.remove(user_2.username)
|
||||||
|
self.assertQuerysetEqual(a5.authors.all(), [])
|
||||||
|
|
||||||
def test_reverse_add(self):
|
def test_reverse_add(self):
|
||||||
# Adding via the 'other' end of an m2m
|
# Adding via the 'other' end of an m2m
|
||||||
a5 = Article(headline='NASA finds intelligent life on Mars')
|
a5 = Article(headline='NASA finds intelligent life on Mars')
|
||||||
|
Loading…
Reference in New Issue
Block a user