Opened 7 years ago
Last modified 7 years ago
#29458 closed Bug
get_field uses related_query_name instead of related_name — at Version 1
| Reported by: | Tomasz Knapik | Owned by: | nobody |
|---|---|---|---|
| Component: | Documentation | Version: | 2.1 |
| Severity: | Normal | Keywords: | |
| Cc: | Aram Dulyan | 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 )
The documentation seems to mention that get_field should use related_name, but when related_query_name is defined, it uses that instead.
Let's say in situation like this...
from django.db import models class ModelA(models.Model): test_model = models.ForeignKey('ModelB', models.CASCADE, related_name='model_a_related_name', related_query_name='model_a_related_q_name') class ModelB(models.Model): some_field = models.CharField(max_length=255)
Using get_field with value from related_name.
>>> from testapp.models import ModelB >>> ModelB._meta.get_field('model_a_related_name') Traceback (most recent call last): File "/home/tomaszk/Projects/testsite/venv/lib64/python3.6/site-packages/django/db/models/options.py", line 566, in get_field return self.fields_map[field_name] KeyError: 'model_a_related_name' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<console>", line 1, in <module> File "/home/tomaszk/Projects/testsite/venv/lib64/python3.6/site-packages/django/db/models/options.py", line 568, in get_field raise FieldDoesNotExist("%s has no field named '%s'" % (self.object_name, field_name)) django.core.exceptions.FieldDoesNotExist: ModelB has no field named 'model_a_related_name' >>>
But this will work.
>>> ModelB._meta.get_field('model_a_related_q_name') <ManyToOneRel: testapp.modela>
Note:
See TracTickets
for help on using tickets.