То, что в основном делает метод bind
, это что-то вроде (не совсем так, потому что аргументы разрезаны, чтобы исключить контекст):
function bind(context) {
var self = this;
return function() {
self.apply(context, arguments);
}
}
Таким образом, в основном это возвращает другую функцию, которая будет называть себя учитывая контекст и аргументы. Если вы снова это bind
, вы свяжете эту вновь созданную функцию, которая будет выглядеть как bind
, как:
function bind(context) {
var self = this;
return function() {
self.apply(context, arguments);
}.bind(otherContext);
}
Но поскольку внутренняя функция, возвращаемая действиями bind в качестве замыкания, когда исходный контекст является первым, связанным первым (self
), который будет контекстом с вашей функцией, будет действительно выполнен.
Фактически можно утверждать, что в этом случае вы были бы оправданными, попросив Джанго выполнить «необработанный запрос», что, конечно, вы можете сделать.
Я бы привел аргумент - ясность. То, что вы делаете, очевидно, сложно, , но оно кратко описывается синтаксисом SQL, который хорошо известен всем программистам. (И, если возникнет необходимость ... и, как мы все знаем, это неизбежно произойдет ... это можно было бы изменить легко.)
Я думаю, что я мог бы поэтому сделать на тот случай, если вы будете здесь использовать прямой SQL. Если бы я был твоим руководителем команды, это, вероятно, то, что я бы предложил.