How to modify a Django model?
如果我想更改例如Django的Site模块:
1 | from django.contrib.sites.models import Site |
在我的项目中我该怎么做?我是子类的,还是要更改或添加一些代码的方法?
还是只创建一个新模型?
您可以通过继承添加字段
如果仍然需要保留对原始Site对象/行的引用,则可以使用多表继承
1 2 3 4 5 6 7 | from django.contrib.sites.models import Site class MySite(Site): new_field = models.CharField(...) def new_method(self): # do something new |
这允许您具有常规的
通过模型继承,您无法更改祖先字段
通过继承,您无法隐藏祖先字段,因为如果您覆盖任何祖先模型中的任何模型字段,Django都会引发FieldError。
我不会冒险为此编写自定义数据库迁移,因为如果更新Django,则可能会与Site模型发生架构冲突。
因此,如果要存储祖先模型允许的更多信息,我将执行以下操作:
1 2 | class SiteLongName(Site): long_name = models.CharField(max_length=60) |