Для этого нет поиска по умолчанию (начиная с версии 2.2), но легко создать :
from django.db.models import GenericIPAddressField
from django.db.models import Lookup
@GenericIPAddressField.register_lookup
class ContainedIn(Lookup):
lookup_name = 'iscontainedin'
def as_postgresql(self, compiler, connection):
lhs, lhs_params = self.process_lhs(compiler, connection)
rhs, rhs_params = self.process_rhs(compiler, connection)
params = lhs_params + rhs_params
return '%s << inet %s' % (lhs, rhs), params
. Затем вы можете использовать поиск с __iscontainedin
:
MyTable.objects.filter(ip__iscontainedin='10.93.1/24')
Жаль, что шаблон, связанный с созданием поиска.Если вы используете это только один раз, запрос extra
действительно меньше проблем.При повторном использовании поиск с соответствующим именем будет более читабельным и требует меньше кода для обслуживания.