Opened 9 days ago
Closed 8 days ago
#36188 closed Bug (invalid)
Reverse lookups on OneToOneField not working?
Reported by: | Willem Van Onsem | Owned by: | hesham hatem |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 5.1 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
This StackOverflow post shows a scenario where a OneToOneField
is filtered on top of another OneToOneField
. So for example with the following modeling:
class Switch(models.Model): fqdn = models.CharField(max_length=45, unique=True) class ConfigState(models.Model): switch = models.OneToOneField(Switch, models.CASCADE, db_column='switch', primary_key=True, related_name='config_state') class EdgeSwitch(models.Model): switch = models.OneToOneField(Switch, models.CASCADE, db_column='switch', primary_key=True, related_name='edge_switch')
The query EdgeSwitch.objects.filter(switch__config_state=1)
does (no longer) work. On Django-3.x it apparently worked.
Change History (5)
comment:2 by , 9 days ago
Owner: | set to |
---|---|
Status: | new → assigned |
comment:3 by , 9 days ago
Resolution: | → invalid |
---|---|
Status: | assigned → closed |
comment:4 by , 8 days ago
Resolution: | invalid |
---|---|
Status: | closed → new |
I found the missing part: the Switch
model needs to have managed = False
. A bit curious that this has impact, so:
class Switch(models.Model): fqdn = models.CharField(max_length=45, unique=True) class Meta: managed = False
comment:5 by , 8 days ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
I think I got it, the tables got an app_label
, but that was probably not registered.
Note:
See TracTickets
for help on using tickets.
I cannot reproduce the issue against main or
stable/5.1.x
with the following patch based on the provided modelsnew file tests/ticket_36188/models.py
new file tests/ticket_36188/tests.py
Please re-open if you can provide a set of models that trigger a
FieldError
.