Opened 3 weeks ago

Last modified 13 days ago

#29458 new Bug

Documentation incorrectly says Model._meta.get_field() uses related_name instead of related_query_name

Reported by: Tomasz Knapik Owned by: nobody
Component: Documentation Version: 2.1
Severity: Normal Keywords:
Cc: Aram Dulyan Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Tomasz Knapik)

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,

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/", 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/", 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>

Change History (3)

comment:1 Changed 3 weeks ago by Tomasz Knapik

Description: modified (diff)

comment:2 Changed 3 weeks ago by Aram Dulyan

Cc: Aram Dulyan added

comment:3 Changed 13 days ago by Tim Graham

Component: UncategorizedDocumentation
Summary: get_field uses related_query_name instead of related_nameDocumentation incorrectly says Model._meta.get_field() uses related_name instead of related_query_name
Triage Stage: UnreviewedAccepted

I haven't investigated in detail but I imagine the documentation should be updated.

Note: See TracTickets for help on using tickets.
Back to Top