Технический ответ: Ну, довольно просто да:
def abstract_method(self):
type(self).objects.filter(..).update(....)
return self
Обратите внимание, что это методы Python, вызываемые с "вызывающим" объектом (объектом, для которого вызывается метод) в качестве первого параметра, и все атрибуты поиска будут происходить с этим объектом и его классом - иначе наследование просто не будет работать вообще.Единственная специфическая для django часть здесь - это то, что Django не позволяет вам использовать ModelManager на экземпляре модели, поэтому вам нужно явно получить класс объекта, который возвращается type(self)
.
НО:
Соображения о стиле кодирования
Django рекомендует, чтобы методы модели, действующие на всю таблицу, принадлежали ModelManager (в отличие от методов, действующих только на текущей строке, которые должны быть реализованы как простыеметоды), так как ваш метод, очевидно, действует на всю таблицу, может быть лучше, чем метод ModelManager.
Я говорю «может», потому что есть серая область, где обновление одной строки подразумевает также обновление некоторых других строк - типичный пример, когда у вас есть флаг, который всегда должен быть установлен только для одной записи, поэтому вы такжехочу сбросить его на всех других записях.(Конечно) в вашем вопросе недостаточно контекста, чтобы сказать, какой из них является правильным выбором.