=== modified file 'django/db/models/query.py'
|
|
|
641 | 641 | except KeyError: |
642 | 642 | pass |
643 | 643 | if lookup_type == 'in': |
644 | | return '%s%s IN (%s)' % (table_prefix, field_name, ','.join(['%s' for v in value])) |
| 644 | in_string = ','.join(['%s' for id in value]) |
| 645 | if in_string: |
| 646 | return '%s%s IN (%s)' % (table_prefix, field_name, in_string) |
| 647 | else: |
| 648 | # Most backends do not accept an empty string inside the IN |
| 649 | # expression, i.e. cannot do "WHERE ... IN ()". Since there are |
| 650 | # also some backends that do not accept "WHERE false", we instead |
| 651 | # use an expression that always evaluates to False. |
| 652 | return '0=1' |
645 | 653 | elif lookup_type == 'range': |
646 | 654 | return '%s%s BETWEEN %%s AND %%s' % (table_prefix, field_name) |
647 | 655 | elif lookup_type in ('year', 'month', 'day'): |
=== modified file 'tests/modeltests/or_lookups/models.py'
|
|
|
69 | 69 | >>> Article.objects.filter(Q(pk=1) | Q(pk=2) | Q(pk=3)) |
70 | 70 | [<Article: Hello>, <Article: Goodbye>, <Article: Hello and goodbye>] |
71 | 71 | |
| 72 | # You could also use "in" to accomplish the same as above. |
| 73 | >>> Article.objects.filter(pk__in=[1,2,3]) |
| 74 | [<Article: Hello>, <Article: Goodbye>, <Article: Hello and goodbye>] |
| 75 | |
| 76 | >>> Article.objects.filter(pk__in=[1,2,3,4]) |
| 77 | [<Article: Hello>, <Article: Goodbye>, <Article: Hello and goodbye>] |
| 78 | |
| 79 | # Passing "in" an empty list returns no results. |
| 80 | >>> Article.objects.filter(pk__in=[]) |
| 81 | [] |
| 82 | |
| 83 | # But can return results if we OR it with another query. |
| 84 | >>> Article.objects.filter(Q(pk__in=[]) | Q(headline__icontains='goodbye')) |
| 85 | [<Article: Goodbye>, <Article: Hello and goodbye>] |
| 86 | |
72 | 87 | # Q arg objects are ANDed |
73 | 88 | >>> Article.objects.filter(Q(headline__startswith='Hello'), Q(headline__contains='bye')) |
74 | 89 | [<Article: Hello and goodbye>] |