diff --git a/django/db/models/query.py b/django/db/models/query.py
index 4d0d295..df9018b 100644
|
a
|
b
|
class QOperator(object):
|
| 715 | 715 | def get_sql(self, opts): |
| 716 | 716 | joins, where, params = SortedDict(), [], [] |
| 717 | 717 | for val in self.args: |
| 718 | | try: |
| 719 | | joins2, where2, params2 = val.get_sql(opts) |
| 720 | | joins.update(joins2) |
| 721 | | where.extend(where2) |
| 722 | | params.extend(params2) |
| 723 | | except EmptyResultSet: |
| 724 | | if not isinstance(self, QOr): |
| 725 | | raise EmptyResultSet |
| | 718 | joins2, where2, params2 = val.get_sql(opts) |
| | 719 | joins.update(joins2) |
| | 720 | where.extend(where2) |
| | 721 | params.extend(params2) |
| 726 | 722 | if where: |
| 727 | 723 | return joins, ['(%s)' % self.operator.join(where)], params |
| 728 | 724 | return joins, [], params |
| … |
… |
class QAnd(QOperator):
|
| 743 | 739 | |
| 744 | 740 | class QOr(QOperator): |
| 745 | 741 | "Encapsulates a combined query that uses 'OR'." |
| | 742 | def get_sql(self, opts): |
| | 743 | joins, where, params = SortedDict(), [], [] |
| | 744 | failed = 0 |
| | 745 | for val in self.args: |
| | 746 | try: |
| | 747 | joins2, where2, params2 = val.get_sql(opts) |
| | 748 | joins.update(joins2) |
| | 749 | where.extend(where2) |
| | 750 | params.extend(params2) |
| | 751 | except EmptyResultSet: |
| | 752 | failed += 1 |
| | 753 | if failed == len( self.args ): |
| | 754 | raise EmptyResultSet |
| | 755 | |
| | 756 | if where: |
| | 757 | return joins, ['(%s)' % self.operator.join(where)], params |
| | 758 | return joins, [], params |
| 746 | 759 | operator = ' OR ' |
| 747 | 760 | def __and__(self, other): |
| 748 | 761 | return QAnd(self, other) |
diff --git a/tests/modeltests/or_lookups/models.py b/tests/modeltests/or_lookups/models.py
index ee2cfd2..a529b0f 100644
|
a
|
b
|
__test__ = {'API_TESTS':"""
|
| 116 | 116 | [<Article: Hello>] |
| 117 | 117 | >>> Article.objects.complex_filter(Q(pk=1) | Q(pk=2)) |
| 118 | 118 | [<Article: Hello>, <Article: Goodbye>] |
| | 119 | |
| | 120 | # Check that Q(id__in=[]) returns the same results as Q(id__in=[]) | Q(id__in=[]) when used with filter : |
| | 121 | >>> Article.objects.filter(Q(id__in=[]) | Q(id__in=[])) |
| | 122 | [] |
| | 123 | >>> Article.objects.filter(Q(id__in=[]) | Q(id=1) |Q(id__in=[])) |
| | 124 | [<Article: Hello>] |
| 119 | 125 | """} |