Skip to content

Commit

Permalink
Refs #26678 -- Added tests for add()/remove() by reference with to_field
Browse files Browse the repository at this point in the history
  • Loading branch information
rixx committed Apr 17, 2019
1 parent 8f579dd commit 684c7ee
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 2 deletions.
8 changes: 7 additions & 1 deletion tests/m2m_and_m2o/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@


class User(models.Model):
username = models.CharField(max_length=20)
username = models.CharField(max_length=20, unique=True)


class Issue(models.Model):
num = models.IntegerField()
cc = models.ManyToManyField(User, blank=True, related_name='test_issue_cc')
client = models.ForeignKey(User, models.CASCADE, related_name='test_issue_client')
users = models.ManyToManyField(User, through='UserIssue')

class Meta:
ordering = ('num',)
Expand All @@ -22,5 +23,10 @@ def __str__(self):
return str(self.num)


class UserIssue(models.Model):
user = models.ForeignKey(User, models.CASCADE, to_field='username')
issue = models.ForeignKey(Issue, models.CASCADE)


class StringReferenceModel(models.Model):
others = models.ManyToManyField('StringReferenceModel')
42 changes: 41 additions & 1 deletion tests/m2m_and_m2o/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def test_m2m_and_m2o(self):
i3 = Issue(num=3)
i3.client = g
i3.save()
i3.cc.add(r)
i3.cc.add(r.pk)

self.assertQuerysetEqual(
Issue.objects.filter(client=r.id), [
Expand Down Expand Up @@ -80,6 +80,46 @@ def test_m2m_and_m2o(self):
lambda i: i.num
)

def test_m2m_add_and_remove_with_through_model(self):
r = User.objects.create(username='russell')
t = User.objects.create(username='tobias')

i = Issue(num=1)
i.client = r
i.save()

i.users.add(r)
i.users.add(t.username)

self.assertQuerysetEqual(
User.objects.filter(issue=i.id).order_by('id'),
[r.pk, t.pk],
lambda u: u.pk,
)

i.users.remove(r.username)
i.users.remove(t)

self.assertQuerysetEqual(
User.objects.filter(issue=i.id).order_by('id'),
[],
)

i.users.add(r, t.username)

self.assertQuerysetEqual(
User.objects.filter(issue=i.id).order_by('id'),
[r.pk, t.pk],
lambda t: t.pk,
)

i.users.remove(t.username, r)

self.assertQuerysetEqual(
User.objects.filter(issue=i.id).order_by('id'),
[],
)


class RelatedObjectUnicodeTests(TestCase):
def test_m2m_with_unicode_reference(self):
Expand Down

0 comments on commit 684c7ee

Please sign in to comment.