Opened 14 years ago
Closed 14 years ago
#17665 closed Bug (invalid)
Inconsitent behaviour of filter() with multi-valued relations.
| Reported by: | Łukasz Rekucki | Owned by: | nobody | 
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 1.3 | 
| Severity: | Normal | Keywords: | |
| Cc: | krzysiumed@… | Triage Stage: | Unreviewed | 
| Has patch: | no | Needs documentation: | no | 
| Needs tests: | no | Patch needs improvement: | no | 
| Easy pickings: | no | UI/UX: | 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:
Company.objects.filter(membership_set__active=True, membership_set__person=1)
The behaviour is the same as query 2), while it should work like 1).
Change History (4)
comment:1 by , 14 years ago
| Description: | modified (diff) | 
|---|
comment:2 by , 14 years ago
comment:3 by , 14 years ago
| Cc: | added | 
|---|
comment:4 by , 14 years ago
| Resolution: | → invalid | 
|---|---|
| Status: | new → closed | 
Ugh, my bad for not testing this with a different set of model. Now that I did, it turns out to be fault of "eav-django" (https://bitbucket.org/neithere/eav-django/src/df6fac3e18be/eav/managers.py#cl-53), which redefines filter() on the manager (but not the QuerySet, wth?). Thanks for the sanity check and sorry for the noise.
I cannot reproduce it. Could you attach your
models.pyand example set ofCompany,PersonandMembership_setobjects please?