В документации для ModelAdmin. list_display
описывает несколько способов настройки метода/функции для использования и отображения в окне списка администрирования:
поле admin_order_field
(описывает, какое поле в модели использовать для заказа методом)allow_tags
(позволяет отображать HTML, а не экранировать)short_description
(устанавливает метку для столбца)boolean
(определяет, следует ли считать это поле булевым полем для отображения)Он описывает их как атрибуты метода.
Только что нашли еще несколько атрибутов метода/функции, используемых для шаблонных фильтров :
is_safe
, используемых при маркировке шаблонного фильтра как safeneeds_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 '%s' % (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
, color_name.allow_tags
, color_name.short_description
и color_name.admin_order_field
.
Если вам нужна более подробная информация, пожалуйста, прочитайте связанную документацию.
Похоже, что это частично описано в 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