ManyToManyField with a through model with to_field set returns no results
|Reported by:||adehnert||Owned by:||carljm|
|Component:||Database layer (models, ORM)||Version:||1.2|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
If you create a model that has a ManyToManyField with through=IntermediateModel, and you set to_field on one of the ForeignKeys in the IntermediateModel, the ManyToManyField won't properly produce the right set of results.
For example, using the attached set of models, I get:
>>> import manytomany.models >>> foobar = manytomany.models.FooBar.objects.all() >>> foobar <FooBar: pk=1 foo=1 bar=1: bar> >>> manytomany.models.FooBar.objects.filter(foo=foobar.foo) [<FooBar: pk=1 foo=1 bar=1: bar>] >>> foobar.foo.bars.all()  >>> foobar2 = manytomany.models.FooBar2.objects.all() >>> foobar2 <FooBar2: pk=1 foo=1 bar=1: bar2> >>> manytomany.models.FooBar2.objects.filter(foo=foobar2.foo) [<FooBar2: pk=1 foo=1 bar=1: bar2>] >>> foobar2.foo.bars.all() [<Bar2: 1: bar2>]
I would expect filter(foo=foo) to produce basically the same set of results as foo.bars (except with the FooBar objects instead of the Bar objects). However, while the former produces results, the latter does not.
I suspect this is related to the behavior experienced in http://email@example.com/msg105967.html. However, while that seems like arguably not a bug, this behavior does seem to clearly qualify (or, at least, should be better-documented than I was finding it to be).
Change History (5)
Changed 4 years ago by adehnert
comment:1 Changed 4 years ago by carljm
- Needs documentation unset
- Needs tests unset
- Owner changed from nobody to carljm
- Patch needs improvement unset
- Triage Stage changed from Unreviewed to Accepted