Принимая во внимание предостережение о том, что изменение Foo._meta.fields также повлияет на суперкласс - и, следовательно, действительно полезно, если суперкласс является абстрактным, я обернул ответ, который @Gerry отбросил как декоратор многоразового использования класса:
def modify_fields(**kwargs):
def wrap(cls):
for field, prop_dict in kwargs.items():
for prop, val in prop_dict.items():
setattr(cls._meta.get_field(field), prop, val)
return cls
return wrap
Используйте это так:
@modify_fields(timestamp={
'verbose_name': 'Available From',
'help_text': 'Earliest date you can book this'})
class Purchase(BaseOrderItem):
pass
В приведенном выше примере изменяются verbose_name и help_text для унаследованного поля 'timestamp'. Вы можете передать столько аргументов ключевого слова, сколько есть полей, которые вы хотите изменить.