#28175 closed Bug (fixed)
__in query on parent model no longer works in 1.11
Reported by: | Daniel Keller | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.11 |
Severity: | Release blocker | Keywords: | |
Cc: | Mariusz Felisiak, Simon Charette | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
I have models
class Place(models.Model): pass class Community(Place): place_ptr = models.OneToOneField(Place, parent_link=True, on_delete=models.CASCADE, primary_key=True, serialize=False, related_name='+') class Potential(models.Model): community = models.ForeignKey(Community, on_delete=CASCADE)
and in 1.10 I can do
Potential.objects.filter(community__in=Place.objects.all())
but in 1.11 this fails with
django.core.exceptions.FieldError: Cannot resolve keyword 'place_ptr' into field. Choices are: [...]
In both versions
Potential.objects.filter(community=Place.objects.first())
works fine.
It's not clear to me from the docs whether the 1.10 behavior was intended, though.
It appears that adding the lines
elif getattr(self.lhs.field.target_field, 'primary_key', False): target_field = 'pk'
to django/db/models/fields/related_lookups.py at line 92 fixes this problem.
Change History (7)
comment:1 by , 8 years ago
Description: | modified (diff) |
---|
comment:2 by , 8 years ago
Severity: | Normal → Release blocker |
---|---|
Triage Stage: | Unreviewed → Accepted |
comment:3 by , 8 years ago
Cc: | added |
---|
comment:4 by , 8 years ago
Cc: | added |
---|
I find it a bit odd that we allow Place
to be used when Community
is expected (Community
is a Place
but not the other way around) but since this was allowed before we should fix that.
Note:
See TracTickets
for help on using tickets.
Bisected to 1bc249c2a67c24fcd28436c85388eff1d826e305.