В документации для ModelAdmin.list_display
описано несколько способов настройки метода/функции для использования и отображения в представлении списка администратора:
-
admin_order_field
(описывает, какое поле в модели используется для упорядочения по методу) -
allow_tags
(позволяет отображать HTML, а не экранировать) -
short_description
(устанавливает метку для столбца) -
boolean
(определяет, должно ли поле обрабатываться логическое поле для отображения)
Он описывает их как атрибуты метода.
Добавление
Просто нашел еще несколько атрибутов метода/функции, используемых для фильтров шаблонов:
-
is_safe
, используемый при маркировке фильтра шаблонов как безопасный -
needs_autoescape
, используемый для работы с автозащитой данных.
Какие еще атрибуты метода существуют в Django (или даже Python)? Или это действительно единственные случаи?
Разъяснение
Просто, чтобы быть ясным, об этом я и говорю конкретно.
В следующем коде:
class Foo(models.Model):
name = models.CharField(max_length=100)
color = models.CharField(max_length=100)
age = models.PositiveIntegerField()
def is_adult(self):
return age > 18
is_adult.boolean = True
is_adult.short_description = "Over 18?"
def colored_name(self):
return '<span style="color: %s">%s</span>' % (self.color, self.name)
colored_name.allow_tags = True
colored_name.short_desciption = "Name"
colored_name.admin_order_field = "name"
Атрибуты метода, о которых я говорю, это is_adult.boolean
, is_adult.short_description
, colored_name.allow_tags
, colored_name.short_description
и colored_name.admin_order_field
.
Если вам нужна дополнительная информация, прочитайте связанную документацию.
Добавление # 2
Похоже, что это частично описано в PEP 232: Атрибуты функции. PEP указывает на сообщение списка рассылки, в котором перечислены другие потенциальные варианты использования атрибутов функций:
Мне нужно связать объявление типа стиля Java с помощью метода что он может быть распознан на основе его типа во время Java-метода отправка. Как вы это делаете с экземплярами?
Мне нужно связать "правило грамматики" с помощью метода Python, чтобы метод вызывается, когда парсер распознает синтаксическую конструкцию во входных данных.
Мне нужно связать объявление IDL с помощью метода, чтобы COM определение интерфейса может быть сгенерировано из исходного файла.
Мне нужно связать строку шаблона XPath с помощью метода Python так что метод может быть вызван, когда ходок по дереву обнаруживает конкретный шаблон в XML DOM.
Мне нужно связать несколько форм документации с помощью метода. Они оптимизированы для разных IDE, сред или языков.
Здесь реализация, позволяющая отвечать на атрибуты метода:
from django.contrib.admin import ModelAdmin
from datetime.datetime import now
class ProfileAdmin(ModelAdmin):
list_display = ('votes_today',)
class VotesToday:
def __call__(self, model_admin, obj):
today = now().replace(hour=0, minute=0, second=0, microsecond=0)
return obj.vote_set.filter(created__gte=today)
@property
def short_description(self):
return 'Votes today (%s)' % now().strftime('%B %d')
@property
def votes_today(self):
if not hasattr(self, '__votes_today'):
self.__votes_today = self.VotesToday()
return self.__votes_today