2

在旧版本的 Django 中,您可以动态更改查找并访问正在查找的值。例如,假设我们通过 ISO 2 字母缩写存储国家,但我们希望允许按国家名称进行搜索。

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 的实现不允许您更改查找,并且该方法也不接收查找值。

4

0 回答 0