关于python:如何修改Django模型?

 2021-02-24 

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

这允许您具有常规的Site对象,可以通过MySite模型进行扩展,在这种情况下,您可以例如通过site.mysite访问其他字段和方法,例如site.mysite.new_field

通过模型继承,您无法更改祖先字段

通过继承,您无法隐藏祖先字段,因为如果您覆盖任何祖先模型中的任何模型字段,Django都会引发FieldError。

我不会冒险为此编写自定义数据库迁移,因为如果更新Django,则可能会与Site模型发生架构冲突。

因此,如果要存储祖先模型允许的更多信息,我将执行以下操作:

1
2
class SiteLongName(Site):
    long_name = models.CharField(max_length=60)