Opened 13 years ago
Last modified 10 years ago
#16609 closed Bug
Admin searches produce duplicate results if search_fields contains M2M traversals — at Version 4
Reported by: | Owned by: | nobody | |
---|---|---|---|
Component: | contrib.admin | Version: | dev |
Severity: | Normal | Keywords: | search_fields m2m duplicate duplicates |
Cc: | cheater00@…, Timothy Schilling | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
I believe this has already been touched upon in #15819, however the consensus (comment ticket:15819#comment:13) was
"For people in situations where .distinct()
is broken for whatever reason, the workaround here is simple: don't use search_fields
with relations in a way that triggers it."
I couldn't find a ticket for this, so here it is.
In my case, I am searching for a keyword which is found in a search_fields
item that isn't traversing M2M. When search_fields
also contains a M2M traversal, I get duplicate results.
In my case - this might be relevant or not - I am traversing a ForeignKey first and then an M2M field in that problematic search_fields entry, e.g:
search_fields = ['=id', '=fkmodel__m2mmodel__name']
This happens even though the string is not matched by fkmodel__m2mmodel__name
, only by id
.
This might not be clear, this is what the model relations look like:
(Model SearchedModel) --ForeignKey--> (Model FKModel) --ManyToMany--> (Model M2MModel)
M2MModel contains the name field that I have specified in search_fields
.
This might or might not be related to #15559.
I have tested this against 1.3, yesterday's 1.3.X, and yesterday's dev and it is broken in all of them. (today is 10 Aug 2011)
Change History (4)
comment:1 by , 13 years ago
Cc: | added |
---|
comment:2 by , 13 years ago
comment:4 by , 13 years ago
Description: | modified (diff) |
---|
Sorry about not using code blocks above - only noticed the error after submitting the ticket. The search_fields should look like this: