Изменить на лету verbose_name в модельном поле администратора django - PullRequest
3 голосов
/ 20 мая 2010

У меня есть этот пример модели, работающий с администратором

class Author(models.Model):
    name = models.CharField(_('Text in here'), max_length=100)

с verbose_name, установленным как ugettext_lazy 'Text in here', но иногда, в зависимости от site_id, я хочу представить другое подробное имя, поэтому я изменил init таким образом

def __init__(self, *args, **kwargs):
    super(Author, self).__init__(*args, **kwargs)
    #some logic in here
    self._meta.get_field('name').verbose_name = _('Other text')

Это работает, отображая «Другой текст» вместо «Текст здесь» ... за исключением самого первого раза, когда используется представление автора / добавления.

¿Это правильный способ сделать это? ¿Как я могу решить проблему первого раза?

Заранее спасибо

1 Ответ

5 голосов
/ 20 мая 2010

Не изменяйте элементы модели.Как вы обнаружили, в определениях моделей происходят всевозможные метаклассы, которые могут нарушить ситуацию.

Вместо этого определите пользовательскую форму и измените метку поля в методе __init__.

...