Let's have model `Payer` and we will create `ExtendedPayer` from it
{{{
class ExtendedPayer(Payer):
...
}}}
We create admin for `ExtendedPayer` and define search fields. We want to
be able to filter by `pk` of `Payer`. So I would expect these to work the
same:
{{{
class ExtendedPayerAdmin(ModelAdmin):
...
search_fields = (
"pk__iexact", ...
)
...
}}}
{{{
class ExtendedPayerAdmin(ModelAdmin):
...
search_fields = (
"id__iexact", ...
)
...
}}}
Guess what? The "id" variant works ok and the "pk" fails with
Why? Because in `construct_search`
([[https://github.com/django/django/blob/4b1bfea2846f66f504265cec46ee1fe94ee9c98b/django/contrib/admin/options.py#L1123|See
Git]]) it's transformed to `pk__iexact__icontains` as it found out that
the `pk` is `payer_ptr` which is FK.
If we want to be correct, it should be `"payer_ptr__pk__iexact"`.
Please let me know if this behaviour is a bug or if is there any reason
behind it.
--
Ticket URL: <https://code.djangoproject.com/ticket/34402>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
Comment (by Mariusz Felisiak):
Both cases `pk` and `id` works with the `__exact` lookup. Do you need
`__iexact`?
--
Ticket URL: <https://code.djangoproject.com/ticket/34402#comment:1>
* stage: Unreviewed => Accepted
Comment:
Agreed, this restriction should be documented of fixed.
--
Ticket URL: <https://code.djangoproject.com/ticket/34402#comment:2>