Admin searches produce duplicate results if search_fields contains M2M traversals
|Reported by:||Owned by:||nobody|
|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|
Description (last modified by )
"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
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
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)