id summary reporter owner description type status component version severity resolution keywords cc stage has_patch needs_docs needs_tests needs_better_patch easy ui_ux 22936 Get rid of field.get_db_prep_lookup() Anssi Kääriäinen nobody "The `Field.get_db_prep_lookup()` method is used to do preparation of a plain Python value for given lookup. Looking at the coding of [https://github.com/django/django/blob/b29316c54bb3465265ff931e807229f13349457d/django/db/models/fields/__init__.py#L749-L783 get_db_prep_lookup()] the `get_db_prep_lookup()` is doing work that belongs into the lookup itself. The same goes also for `get_prep_lookup()`. It seems that `get_prep_lookup()` is either doing something that should actually be done in `get_prep_value()`, or something that belongs into lookups. If a custom field needs to do different kind of preparation for some lookups (something that can't be done in `get_[db_]prep_value()`, it can always provide a lookup subclass that does the right thing for that field type. An example is [https://github.com/django/django/blob/0247c9b08f8da4a2d93b9cede6c615011552b55a/django/db/models/fields/__init__.py#L1878-L1881 IntegerField and 'lt' and 'gte' lookups]. Providing custom subclasses might be laborious to do if there are a lot of different lookup types that need custom preparation. For that reason a hook for custom fields could still be useful. Even if we want to leave `get_db_prep_lookup` and `get_prep_lookup` hooks for custom fields, the base coding belongs into the lookups themselves. Currently the fields are doing work that clearly belongs to the lookup itself." Cleanup/optimization closed Database layer (models, ORM) dev Normal fixed Ready for checkin 1 0 0 0 0 0