| 811 | ) |
| 812 | |
| 813 | def test_ticket7096(self): |
| 814 | # Make sure exclude() with multiple conditions continues to work. |
| 815 | self.assertSequenceEqual( |
| 816 | Tag.objects.filter(parent=self.t1, name="t3").order_by("name"), |
| 817 | [self.t3], |
| 818 | ) |
| 819 | self.assertSequenceEqual( |
| 820 | Tag.objects.exclude(parent=self.t1, name="t3").order_by("name"), |
| 821 | [self.t1, self.t2, self.t4, self.t5], |
| 822 | ) |
| 823 | self.assertSequenceEqual( |
| 824 | Item.objects.exclude(tags__name="t1", name="one") |
| 825 | .order_by("name") |
| 826 | .distinct(), |
| 827 | [self.i4, self.i3, self.i2], |
| 828 | ) |
| 829 | self.assertSequenceEqual( |
| 830 | Item.objects.filter(name__in=["three", "four"]) |
| 831 | .exclude(tags__name="t1") |
| 832 | .order_by("name"), |
| 833 | [self.i4, self.i3], |
| 834 | ) |
| 835 | |
| 836 | # More twisted cases, involving nested negations. |
| 837 | self.assertSequenceEqual( |
| 838 | Item.objects.exclude(~Q(tags__name="t1", name="one")), |
| 839 | [self.i1], |
| 840 | ) |
| 841 | self.assertSequenceEqual( |
| 842 | Item.objects.filter(~Q(tags__name="t1", name="one"), name="two"), |
| 843 | [self.i2], |
| 844 | ) |
| 845 | self.assertSequenceEqual( |
| 846 | Item.objects.exclude(~Q(tags__name="t1", name="one"), name="two"), |
| 847 | [self.i4, self.i1, self.i3], |
| 848 | ) |
| 849 | |
| 850 | def test_tickets_7204_7506(self): |
| 851 | # Make sure querysets with related fields can be pickled. If this |