Inconsitent behaviour of filter() with multi-valued relations.
|Reported by:||Łukasz Rekucki||Owned by:||nobody|
|Component:||Database layer (models, ORM)||Version:||1.3|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
Description (last modified by )
This is probably a duplicate as I recall seeing a similar issue, but I couldn't find it, so here it goes:
We have 2 models (lets say, Company and Person), connected thru a M2M table (Membership) with additional attribute "active".
The following queries work as documented:
base = Company.objects.all() # 1) select all companies in which person 1 is active base.filter(membership_set__active=True, membership_set__person=1) # 2) select all companies in which some membership is active or person '1' is a member base.filter(membership_set__active=True).filter(membership_set__person=1)
But if you apply the
filter() directly to the manager:
The behaviour is the same as query 2), while it should work like 1).