Skip to content
This repository was archived by the owner on Aug 19, 2025. It is now read-only.
This repository was archived by the owner on Aug 19, 2025. It is now read-only.

Joins in select_related ignoring nulls, should maybe use isouter? #45

@joshsharp

Description

@joshsharp

Hello! I've run into an issue using select_related. I've noticed that where a relation is null and the related table is listed in select_related, there is no record retrieved for the original model. Using these models for example:

class Track(orm.Model):
    # fields omitted, not relevant  

class Post(orm.Model):
    # snip...
    track = orm.ForeignKey(Track, allow_null=True)

Let's say I have two posts with IDs 1 and 2. Post 2 does not have a related track. If I write the query Post.objects.select_related('track').all(), I only get post 1 returned.

However, if the select_from in build_select_expression is modified to include isouter:

select_from = sqlalchemy.sql.join(select_from, model_cls.__table__, isouter=True)

This seems to do the trick.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions