Opened 6 years ago

Last modified 6 years ago

#22977 assigned Cleanup/optimization

No validation error when ForeignKey related_name clashes with manager name.

Reported by: Russell Keith-Magee Owned by: Davide Ceretti
Component: Core (System checks) Version: master
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no


Consider the following model definition:

class Author(models.Model):
    authors = models.Manager()

    name = models.CharField(max_length=100)

    mentor = models.ForeignKey('self', related_name='authors')

The related name on the the foreign key clashes with the manager, so when you try to issue a query:


you get an error because "Author.authors has no attribute 'filter'".

The problem is order dependent; if you define the manager *after* the foreign key, you get different errors.

I haven't checked what errors you get if you just have the default Manager, and a related_name of 'objects'.

There may also be problems if you have a field named 'objects'.

I suspect this class of problem could be picked up by the system check framework.

Change History (6)

comment:1 Changed 6 years ago by Konrad Świat

Owner: changed from nobody to Konrad Świat
Status: newassigned

comment:2 Changed 6 years ago by Konrad Świat

Has patch: set

comment:3 Changed 6 years ago by Tim Graham

Patch needs improvement: set

As Loic noted on the PR, we should revisit this after the _meta factor is merged.

comment:4 Changed 6 years ago by Konrad Świat

Owner: Konrad Świat deleted
Status: assignednew

comment:5 Changed 6 years ago by Davide Ceretti

Owner: set to Davide Ceretti
Status: newassigned
Version: 1.6master

comment:6 Changed 6 years ago by Davide Ceretti

Given loic's comment at, what would be the correct implementation of this validation check? Adding it to BaseManager.check method?

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