Django запустить код перед доступом к полю модели?(поля прокси-модели) - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь прокси доступ к полям некоторых моделей.Простой пример использования, которое я хочу.

@uppercase_fields(['name'])
class Book(models.Model):
   name = models.CharField(max_length=50)
   # .. more fields ..

Дан экземпляр книги с именем = 'some_book':
Доступ к book.name должен вернуть 'SOME_BOOK'

Я знаюэто выглядит странно, но мне нужна оболочка доступа, подобная этой, для полей модели, которая будет действовать так, как если бы я получал доступ к полям модели в обычном режиме.Так что метод здесь не вариант.

Я думал об использовании __getattr__, но я читал, что это может испортить внутренности django.Любой лучший способ, желательно простой?

1 Ответ

0 голосов
/ 27 мая 2018

Я думаю, что вам придется идти с __getattribute__ (не __getattr__, потому что он вызывается, только если атрибут не может быть найден другими способами).Ваша реализация должна вызвать super().__getattribute__ для доступа к значению, а затем либо изменить его, если оно находится в вашем списке декораторов, либо вернуть как есть.

...