Commit 46ecfb9b authored by Anssi Kääriäinen's avatar Anssi Kääriäinen Committed by Tim Graham
Browse files

Fixed #26196 -- Made sure __in lookups use to_field as default.

Thanks Simon Charette for the test.
parent 04e13c89
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -210,7 +210,7 @@ class BaseExpression(object):
        ])
        return c

    def _prepare(self):
    def _prepare(self, field):
        """
        Hook used by Field.get_prep_lookup() to do custom preparation.
        """
+1 −1
Original line number Diff line number Diff line
@@ -740,7 +740,7 @@ class Field(RegisterLookupMixin):
        Perform preliminary non-db specific lookup checks and conversions
        """
        if hasattr(value, '_prepare'):
            return value._prepare()
            return value._prepare(self)

        if lookup_type in {
            'iexact', 'contains', 'icontains',
+7 −1
Original line number Diff line number Diff line
@@ -1108,12 +1108,18 @@ class QuerySet(object):
        for field, objects in other._known_related_objects.items():
            self._known_related_objects.setdefault(field, {}).update(objects)

    def _prepare(self):
    def _prepare(self, field):
        if self._fields is not None:
            # values() queryset can only be used as nested queries
            # if they are set up to select only a single field.
            if len(self._fields or self.model._meta.concrete_fields) > 1:
                raise TypeError('Cannot use multi-field values as a filter value.')
        else:
            # If the query is used as a subquery for a ForeignKey with non-pk
            # target field, make sure to select the target field in the subquery.
            foreign_fields = getattr(field, 'foreign_related_fields', ())
            if len(foreign_fields) == 1 and not foreign_fields[0].primary_key:
                return self.values(foreign_fields[0].name)
        return self

    def _as_sql(self, connection):
+1 −1
Original line number Diff line number Diff line
@@ -235,7 +235,7 @@ class Query(object):
        memo[id(self)] = result
        return result

    def _prepare(self):
    def _prepare(self, field):
        return self

    def get_compiler(self, using=None, connection=None):
+3 −0
Original line number Diff line number Diff line
@@ -21,3 +21,6 @@ Bugfixes
* Fixed a regression for cases where
  ``ForeignObject.get_extra_descriptor_filter()`` returned a ``Q`` object
  (:ticket:`26153`).

* Fixed regression with an ``__in=qs`` lookup for a ``ForeignKey`` with
  ``to_field`` set (:ticket:`26196`).
Loading