Opened 12 years ago
Closed 11 years ago
#18668 closed New feature (fixed)
Make related_query_name more configurable
Reported by: | zmsmith | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.4 |
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 |
Description
Using related_name
for accessor_name
and related_query_name
makes it difficult it mimic django's default functionality with overridden attribute names.
For example, if I have a model Foo
with a ForeignKey
to Bar
, but I want Bar
to interact with Foo
as though it's a model named Fizz
there's no way to allow Bar
to have an attribute called fizz_set
and query against the field fizz
.
I believe this could be implemented easily and be backwards compatible by giving ForeignKey
and ManyToManyField
additional key word argument related_query_name
that would be passed down to rel_class
. Then get_query_name
could just check for the existence of this value before returning either related_name
or opts.object_name.lower()
as it currently does.
Are there any reasons not to do this? I couldn't find any prior discussion in Trac.
Change History (4)
comment:1 by , 12 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:3 by , 11 years ago
Patch needs improvement: | set |
---|
Part of what's included in the PR above was committed in 99b467f272da91b8894dc90d793d8d2c40b78d8c and 12cb0df10f12e715bcaafbee4290c92d4ed6f111. It looks like the PR contains some things that weren't added (e.g. adding this on generic relations) but it needs to be updated to merge cleanly.
comment:4 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
#22207 [b77f26313cddbfde20dcf2661e9bd35458c2d1bd] fixed the remaining case of generic relations.
It took me quite some time to understand the problem described here, but I think it's valid.
I'll rephrase it to ensure we're talking about the same thing, and for the benefit of other contributors.
The OP's description translates to the following models:
With these definitions, you can do:
Now, if you add
related_name='fizz_set'
to theForeignKey
declaration, you can do:And if you add
related_name='fizz'
it doesn't improve the situation: