Django的模型字段提供了一个未记录的contribute_to_class方法。
我们可以使用的Django的另一个特性是class_prepared信号。在from django.db.models import CharField
from django.db.models.signals import class_prepared
def add_field(sender, **kwargs):
"""
class_prepared signal handler that checks for the model named
MyModel as the sender, and adds a CharField
to it.
"""
if sender.__name__ == "MyModel":
field = CharField("New field", max_length=100)
field.contribute_to_class(sender, "new_field")
class_prepared.connect(add_field)
要覆盖字段,只需从模型中删除原始字段:
^{pr2}$
我刚刚通过将这段代码放在我的应用程序的__init__.py中测试了这个解决方案。您还需要编写自定义迁移:from django.db import migrations, models
class Migration(migrations.Migration):
def __init__(self, name, app_label):
# overriding application operated upon
super(Migration, self).__init__(name, 'admin')
dependencies = [
('my_app', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='logentry',
name='object_id',
field=models.CharField('object id', max_length=1000, blank=True, null=True),
),
]
看起来很管用,但使用它要自担风险。
您可以阅读更多here。在