#1579 closed defect (fixed)
Exclude in limit_choices_to doesn't work
Reported by: | Rudolph Froger | Owned by: | Adrian Holovaty |
---|---|---|---|
Component: | Core (Other) | Version: | magic-removal |
Severity: | major | Keywords: | limit_choices_to exclude |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I'm migrating my project to Magic Removal. I couldn't find how to do the equivalent of the old limit_choices_to = {'name__ne' : 'John'}
in Magic Removal. This should be something like: limit_choices_to = {'name__exclude': 'John'}
.
See the discussion at Google group django-users.
Change History (4)
comment:1 by , 19 years ago
comment:2 by , 19 years ago
I misremembered about _get_sql_clause (that's actually a method on QuerySets). Anyway, I'm working on this now, Adrian has given the go-ahead.
comment:3 by , 19 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
Proposal: Change the implementation of limit_choices_to (and all places that accept a dictionary and pass it to .filter()) to accept a 'Q' object as an alternative. 'Q; objects can be detected by having the 'get_sql_clause' method (I believe it is currently '_get_sql_clause', but this doesn't make much sense -- it should be changed to be a public method instead of a semi-private one, since it is only ever used by external classes I think).
If it is a 'Q' object, then it is passed as a single positional parameter to filter(), instead of as keyword arguments. For the above use case, you can then do
limit_choices_to = QNot(name='John')
(IIRC). Since you can combine 'Q' objects, you can build up any arbitrary query this way, including queries that require custom 'Q'-type classes.What do the other devs think? I'm happy to implement it.