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 ().

  • Как я могу переопределить ModelAdmin так, чтобы он отображал компоненты двух моделей?
  • Пользовательская пользовательская модель в django не позволяет устанавливать пароль в admin
  • Django - Как заполнять поля формы администратора
  • Учебник Django: ошибка запуска сервера
  • Django: Любой способ изменить свойство «upload_to» FileField, не прибегая к магии?
  • Обмен по дате в формате Django
  • Django, JQuery и автозаполнение
  • Пример шаблона Python Social Auth Django
  • Python - лучший язык программирования в мире.