Ticket #1050: hacked_Q_for_isnull.py

File hacked_Q_for_isnull.py, 1.0 KB (added by Ben Slavin <benjamin.slavin@…>, 12 years ago)

Monkey patch as a temporary work-around

Line 
1from django.db.models.query import Q
2
3class hacked_Q_for_isnull(Q):
4    """
5    Q object that forces all joins to be LEFT JOINs.  This is necessary
6    in the case of a filter for foo_isnull=True.
7   
8    For a bit more detail, see ticket #1050
9        http://code.djangoproject.com/ticket/1050
10   
11    Example usage:
12        Foo.objects.filter(hacked_Q_for_isnull(bar__isnull=True))
13   
14    Note:
15        The above usage is the only one that's been tested.  Even so,
16        this is an ugly approach but I hope it will be enough until the
17        QuerySet refactor is completed.
18    """
19    def get_sql(self, opts):
20        results = super(hacked_Q_for_isnull, self).get_sql(opts)
21        new_results = []
22        for d in results:
23            if isinstance(d, dict):
24                temp = {}
25                for k,v in d.items():
26                    temp_list = list(v)
27                    temp_list[1] = 'LEFT JOIN'
28                    temp[k] = temp_list
29                d=temp
30            new_results.append(d)
31        return new_results
Back to Top