Ticket #32690: ticket_32690.diff
File ticket_32690.diff, 2.1 KB (added by , 4 years ago) |
---|
-
new file tests/ticket_32690/models.py
commit fded86c4f71deb33a3e5db89476676f82bdcf092 Author: Mariusz Felisiak <felisiak.mariusz@gmail.com> Date: Thu Apr 29 06:58:23 2021 +0200 test diff --git a/tests/ticket_32690/__init__.py b/tests/ticket_32690/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/ticket_32690/models.py b/tests/ticket_32690/models.py new file mode 100644 index 0000000000..06ed5a0a6f
- + 1 from django.db import models 2 from django.db.models import Count, Q 3 4 5 class RealmAccess(models.Model): 6 name = models.CharField(max_length=100) 7 8 9 class Actor(models.Model): 10 realm_access = models.ManyToManyField(RealmAccess, related_name='actors') 11 12 13 class ThingManager(models.QuerySet): 14 def filter_by_realm_access_broken(self, actor): 15 realm_access = RealmAccess.objects.filter(actors=actor) 16 queryset = self.annotate(Count("actor__realm_access")) 17 import sqlparse 18 print(sqlparse.format(str(queryset.filter( 19 Q( 20 actor__realm_access__in=realm_access 21 ) 22 | Q(actor__realm_access__count=0) 23 ).query), reindent=True, keyword_case='upper')) 24 25 return queryset.filter( 26 Q( 27 actor__realm_access__in=realm_access 28 ) 29 | Q(actor__realm_access__count=0) 30 ) 31 32 class Thing(models.Model): 33 actor = models.ForeignKey(Actor, on_delete=models.CASCADE) 34 date = models.DateField() 35 36 objects = ThingManager.as_manager() -
new file tests/ticket_32690/tests.py
diff --git a/tests/ticket_32690/tests.py b/tests/ticket_32690/tests.py new file mode 100644 index 0000000000..ff70c1c7fe
- + 1 from django.test import TestCase 2 3 from .models import Actor, RealmAccess, Thing 4 5 class MyTests(TestCase): 6 7 def test_1(self): 8 actor1 = Actor.objects.create() 9 actor2 = Actor.objects.create() 10 11 r1 = RealmAccess.objects.create(name='ok') 12 r2 = RealmAccess.objects.create(name='ok2') 13 14 actor1.realm_access.add(r1) 15 16 list(Thing.objects.filter_by_realm_access_broken(actor1))