Вам необходимо создать функцию shadowing
для свойства в модели. Я имею в виду, что вам нужно будет воссоздать функцию в классе ModelAdmin с тем же именем, что и у свойства, определенного в основной модели.
Пример:
# Model
class Product(models.Model):
@property # you can omit this directive
def in_stock(self):
# boolean check return
return self.quantity > 0
...
# Django-modeladmin
class ProductAdmin(admin.ModelAdmin):
list_display = ('in_stock', ...)
def in_stock(self, instance):
return instance.in_stock
in_stock.boolean = True
document.activeElement сохраняет текущий фокусируемый элемент.
Итак, на панели инструментов вы можете добавить обработчик «mousedown» к этой функции:
function preventFocus() {
var ae = document.activeElement;
setTimeout(function() { ae.focus() }, 1);
}
Попробуйте этот пример:
<html>
<head>
<script>
function preventFocus() {
var ae = document.activeElement;
setTimeout(function() { ae.focus() }, 1);
}
</script>
</head>
<body>
<input type="text"/>
<input type="button" onmousedown="preventFocus()" onclick="alert('clicked')" value="Toolbar" />
</body>
</html>
Я не думаю, что есть простой способ сделать то, что вы хотите, потому что это поведение браузера по умолчанию.
Вы, конечно, можете размыть () кнопку, как только она станет щелкнул, но это просто отменит выбор всего. Чтобы ранее активный объект вернулся в фокус, вам необходимо создать своего рода «память», добавив обработчик размытия для каждого элемента, чтобы отслеживать, какой элемент имел / потерял фокус последним (сохранить идентификатор элемента в глобальном и обновлять его, когда элемент теряет фокус).
Может быть, вам стоит попробовать использовать stateful
и свойства изменения состояния для полей формы или чего-то еще, чтобы вернуть фокус?
Поскольку кнопки панели инструментов стилизованы под обычные элементы кнопок HTML, то это фактическое поведение браузера , и вы должны дважды подумать, прежде чем его менять. НО ТЕМ НЕМЕНЕЕ...
Я бы прикрепил один прослушиватель событий размытия ко всем полям. Этот слушатель должен сохранить поле, потерявшее фокус, в глобальной переменной.
Тогда все кнопки панели инструментов должны получить один слушатель событий фокуса. Этот слушатель должен сфокусировать поле, которое было сохранено, как описано выше.
Этот код должен работать, хотя он не тестировал его