Изменение lookup_type в Django 1.10+

В старых версиях Django вы могли изменить поиск на лету и получить доступ к искомому значению. Например, предположим, что мы храним страну под ее двухбуквенным сокращением ISO, но мы хотим разрешить поиск по названию страны.

from .data import COUNTRIES

class CountryField(…):
    def get_prep_lookup(self, lookup_type, value):
        if lookup_type == 'icontains':
            matching_codes = [
                country.code for country in COUNTRIES if value in country.name.lower()
            ]
            lookup_type = "in"
            values = matching_codes
        # ... perform similar for contains, startswith, endswith, etc. lookups
        return super(CountryField, self).get_prep_lookup(lookup_type, value)

Начиная с Django 1.10, get_prep_lookup не рекомендуется в объекте Field. Они рекомендуют создавать подклассы Lookup классы и определяющие get_prep_lookup,

Проблема, насколько я могу судить, в реализации Lookup.get_prep_lookup не позволяет изменить поиск, и метод также не получает значение поиска.

0 ответов

Другие вопросы по тегам