Changes between Version 1 and Version 2 of Ticket #22936


Ignore:
Timestamp:
Apr 11, 2016, 8:57:46 PM (8 years ago)
Author:
Tim Graham
Comment:

As suggested in the ticket description, I did the small step of moving IntegerField.get_prep_lookup() to lookup subclasses: PR.

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #22936 – Description

    v1 v2  
    1 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/master/django/db/models/fields/__init__.py#L655 get_db_prep_lookup()] the get_db_prep_lookup() is doing work that belongs into the lookup itself.
     1The `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.
    22
    3 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.
     3The 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.
    44
    5 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/master/django/db/models/fields/__init__.py#L1717 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.
     5If 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.
    66
    7 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.
     7Even 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.
Back to Top