修改继承字段的属性

2 投票
2 回答
1288 浏览
提问于 2025-04-15 17:14

我想修改一个从基类继承来的模型字段的属性。但是我下面的做法似乎没有任何效果。有没有什么好的建议?

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 个回答

0

好的,这个事情根本不可能,原因如下:

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

补充:顺便说一下:不要试图在构造函数里面改变类的属性,这样做并不明智。你现在想做的事情,实际上是在创建一行数据的时候去改变表的结构。如果你在用SQL的时候,你不会这么做,对吧?这完全是两回事。改变表单的方式就不一样了——我经常动态地改变一个表单的实例,但我只是在改变这个特定的实例,而不是整个表单的模板(类)。比如说,我可能会动态添加一个字段,这个字段在这个特定的表单实例中是必需的。

3

所以呢,你需要修改空白和帮助文本的属性。我猜你想要这个功能是为了让帮助文本在表单中显示出来,并且表单不会提示“这个字段是必填的”。

那么在表单中这样做:

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

   some_field = forms.CharField(required=False, help_text="Whatever you want")

撰写回答