Какие атрибуты метода используются в Django?

В документации для ModelAdmin. list_display описывает несколько способов настройки метода/функции для использования и отображения в окне списка администрирования:

  • поле admin_order_field (описывает, какое поле в модели использовать для заказа методом)
  • allow_tags (позволяет отображать HTML, а не экранировать)
  • short_description (устанавливает метку для столбца)
  • boolean (определяет, следует ли считать это поле булевым полем для отображения)

Он описывает их как атрибуты метода.

Добавление

Только что нашли еще несколько атрибутов метода/функции, используемых для шаблонных фильтров :

  • is_safe, используемых при маркировке шаблонного фильтра как 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 '%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.

Если вам нужна более подробная информация, пожалуйста, прочитайте связанную документацию.

Добавление #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

17
задан Mechanical snail 1 October 2011 в 22:26
поделиться