Django: переопределить get_FOO_display ()

В общем, я не знаком с методами переопределения python и с помощью super ().

вопрос: могу ли я переопределить get_FOO_display() ?

 class A(models.Model): unit = models.IntegerField(choices=something) def get_unit_display(self, value): ... use super(A, self).get_unit_display() 

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

Но super(A, self).get_unit_display() не работает.

2 Solutions collect form web for “Django: переопределить get_FOO_display ()”

Обычно вы просто переопределяете метод, как вы показали. Но трюк здесь в том, что метод get_FOO_display отсутствует в суперклассе, поэтому вызов super метода ничего не сделает. Метод добавляется динамически классом поля, когда он добавляется к модели метаклассом – см. Источник здесь .

Одна вещь, которую вы можете сделать, это определить настраиваемый подкласс Field для вашего поля unit и переопределить contribute_to_class так, чтобы он построил метод, который вы хотите. К сожалению, это немного сложно.

(Я не понимаю ваш второй вопрос. Что именно вы спрашиваете?)

Вы должны уметь переопределить любой метод в суперклассе, создав метод с таким же именем в подклассе. Подпись аргумента не рассматривается. Например:

 class A(object): def method(self, arg1): print "Method A", arg1 class B(A): def method(self): print "Method B" A().method(True) # "Method A True" B().method() # "Method B" 

В случае get_unit_display () вам вообще не нужно называть super (), если вы хотите изменить отображаемое значение, но если вы хотите использовать super (), убедитесь, что вы вызываете его с правильной подписью , например:

 class A(models.Model): unit = models.IntegerField(choices=something) def get_unit_display(self, value): display = super(A, self).get_unit_display(value) if value > 1: display = display + "s" return display 

Обратите внимание, что мы передаем значение супер () get_unit_display ().

  • Как я могу поднять ValidationError (или сделать что-то подобное) в views.py моего Django?
  • Создание облака тегов из списка в Django?
  • Django + MySQL на Mac OS 10.6.2 Snow Leopard
  • Django не отправляет электронные письма администраторам
  • PyDev и Django: автозаполнение не обнаруживает Django?
  • Каков наиболее распространенный способ настройки статических файлов при отладке и выпуске Django
  • Персистский пользователь Django в сеансе
  • Развертывание Django с помощью gunicorn Нет модуля с именем ImportError: нет модуля с именем validation
  • Как получить все значения из класса enum python?
  • Unicodedecodeerror с сервером
  • Получение объекта 'str' не имеет атрибута 'get' в Django
  • Python - лучший язык программирования в мире.