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: cheater00@… 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 Aymeric Augustin)

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 cheater <cheater00@…>, 13 years ago

Cc: cheater00@… added

comment:2 by cheater <cheater00@…>, 13 years ago

Sorry about not using code blocks above - only noticed the error after submitting the ticket. The search_fields should look like this:

search_fields = ['=id', '=fkmodel__m2mmodel__name'] 

comment:3 by Aymeric Augustin, 13 years ago

Description: modified (diff)

Fixed formatting.

comment:4 by Aymeric Augustin, 13 years ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top