Commit 9ef3cab4 authored by Anssi Kääriäinen's avatar Anssi Kääriäinen
Browse files

Made sure join_field is always available in .join()

Refs #19385
parent a04df803
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -636,10 +636,10 @@ class SQLCompiler(object):
                        int_opts = int_model._meta
                        continue
                    lhs_col = int_opts.parents[int_model].column
                    link_field = int_opts.get_ancestor_link(int_model)
                    int_opts = int_model._meta
                    alias = self.query.join((alias, int_opts.db_table, lhs_col,
                            int_opts.pk.column),
                            promote=promote)
                            int_opts.pk.column), promote=promote, join_field=link_field)
                    alias_chain.append(alias)
            else:
                alias = root_alias
@@ -685,10 +685,11 @@ class SQLCompiler(object):
                            int_opts = int_model._meta
                            continue
                        lhs_col = int_opts.parents[int_model].column
                        link_field = int_opts.get_ancestor_link(int_model)
                        int_opts = int_model._meta
                        alias = self.query.join(
                            (alias, int_opts.db_table, lhs_col, int_opts.pk.column),
                            promote=True
                            promote=True, join_field=link_field
                        )
                        alias_chain.append(alias)
                alias = self.query.join(
+4 −2
Original line number Diff line number Diff line
@@ -944,6 +944,7 @@ class Query(object):
        The 'join_field' is the field we are joining along (if any).
        """
        lhs, table, lhs_col, col = connection
        assert lhs is None or join_field is not None
        existing = self.join_map.get(connection, ())
        if reuse is None:
            reuse = existing
@@ -1003,8 +1004,9 @@ class Query(object):
        for field, model in opts.get_fields_with_model():
            if model not in seen:
                link_field = opts.get_ancestor_link(model)
                seen[model] = self.join((root_alias, model._meta.db_table,
                        link_field.column, model._meta.pk.column))
                seen[model] = self.join(
                    (root_alias, model._meta.db_table, link_field.column,
                     model._meta.pk.column), join_field=link_field)
        self.included_inherited_models = seen

    def remove_inherited_models(self):