1. from datetime import datetime
    
  2. 
    
  3. from django.test import TestCase
    
  4. 
    
  5. from .models import Article, Category
    
  6. 
    
  7. 
    
  8. class M2MMultipleTests(TestCase):
    
  9.     def test_multiple(self):
    
  10.         c1, c2, c3, c4 = [
    
  11.             Category.objects.create(name=name)
    
  12.             for name in ["Sports", "News", "Crime", "Life"]
    
  13.         ]
    
  14. 
    
  15.         a1 = Article.objects.create(
    
  16.             headline="Parrot steals", pub_date=datetime(2005, 11, 27)
    
  17.         )
    
  18.         a1.primary_categories.add(c2, c3)
    
  19.         a1.secondary_categories.add(c4)
    
  20. 
    
  21.         a2 = Article.objects.create(
    
  22.             headline="Parrot runs", pub_date=datetime(2005, 11, 28)
    
  23.         )
    
  24.         a2.primary_categories.add(c1, c2)
    
  25.         a2.secondary_categories.add(c4)
    
  26. 
    
  27.         self.assertQuerysetEqual(
    
  28.             a1.primary_categories.all(),
    
  29.             [
    
  30.                 "Crime",
    
  31.                 "News",
    
  32.             ],
    
  33.             lambda c: c.name,
    
  34.         )
    
  35.         self.assertQuerysetEqual(
    
  36.             a2.primary_categories.all(),
    
  37.             [
    
  38.                 "News",
    
  39.                 "Sports",
    
  40.             ],
    
  41.             lambda c: c.name,
    
  42.         )
    
  43.         self.assertQuerysetEqual(
    
  44.             a1.secondary_categories.all(),
    
  45.             [
    
  46.                 "Life",
    
  47.             ],
    
  48.             lambda c: c.name,
    
  49.         )
    
  50.         self.assertQuerysetEqual(
    
  51.             c1.primary_article_set.all(),
    
  52.             [
    
  53.                 "Parrot runs",
    
  54.             ],
    
  55.             lambda a: a.headline,
    
  56.         )
    
  57.         self.assertQuerysetEqual(c1.secondary_article_set.all(), [])
    
  58.         self.assertQuerysetEqual(
    
  59.             c2.primary_article_set.all(),
    
  60.             [
    
  61.                 "Parrot steals",
    
  62.                 "Parrot runs",
    
  63.             ],
    
  64.             lambda a: a.headline,
    
  65.         )
    
  66.         self.assertQuerysetEqual(c2.secondary_article_set.all(), [])
    
  67.         self.assertQuerysetEqual(
    
  68.             c3.primary_article_set.all(),
    
  69.             [
    
  70.                 "Parrot steals",
    
  71.             ],
    
  72.             lambda a: a.headline,
    
  73.         )
    
  74.         self.assertQuerysetEqual(c3.secondary_article_set.all(), [])
    
  75.         self.assertQuerysetEqual(c4.primary_article_set.all(), [])
    
  76.         self.assertQuerysetEqual(
    
  77.             c4.secondary_article_set.all(),
    
  78.             [
    
  79.                 "Parrot steals",
    
  80.                 "Parrot runs",
    
  81.             ],
    
  82.             lambda a: a.headline,
    
  83.         )