Изменение свойств унаследованного поля - PullRequest
2 голосов
/ 21 декабря 2009

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

def __init__(self, *args, **kwargs):
    super(SomeModel, self).__init__(*args, **kwargs)
    f = self._meta.get_field('some_field')
    f.blank = True
    f.help_text = 'This is optional'

Ответы [ 2 ]

3 голосов
/ 23 декабря 2009

Итак .. Вам нужно изменить пустые атрибуты и атрибуты help_text .. И я предполагаю, что вы хотите эту функцию просто для того, чтобы help_text отображался в формах, а форма не вызывает "это поле обязательно для заполнения"

Так делайте это в формах:

class MyForm(ModelForm):
   class Meta:
      model = YourModel

   some_field = forms.CharField(required=False, help_text="Whatever you want")
0 голосов
/ 22 декабря 2009

ОК, это просто невозможно, вот почему:

http://docs.djangoproject.com/en/1.1/topics/db/models/#field-name-hiding-is-not-permitted

EDIT: И, между прочим: не пытайтесь изменять свойства класса внутри конструктора, это не мудрый поступок. По сути, вы пытаетесь изменить таблицу при создании строки. Вы бы этого не сделали, если бы вы просто использовали SQL, не так ли? :) Таким способом меняются совершенно другие вещи - я часто динамически изменяю экземпляр форму, но затем я все еще изменяю только этот один экземпляр, а не весь шаблон (класс) формы, которая будет использоваться (например динамически добавить поле, которое требуется в данном случае формы).

...