如何修改Django模型?

Y7d*_*7da 3 python django django-models

如果我想改变例如Django的Site模块:

from django.contrib.sites.models import Site
Run Code Online (Sandbox Code Playgroud)

我如何在我的项目中做到这一点?我是子类还是我该怎么做才能更改或添加一些代码?

或者我只是创建一个新模型?

bak*_*kal 5

您可以通过继承添加字段

如果仍需要保留对原始Site对象/行的引用,则可以使用多表继承

from django.contrib.sites.models import Site

class MySite(Site):
    new_field = models.CharField(...)

    def new_method(self):
        # do something new
Run Code Online (Sandbox Code Playgroud)

这可以让你有定期Site的对象,可以由您的扩展MySite模型,在这种情况下,您可以访问如通过额外的属性和方法site.mysite,如site.mysite.new_field.

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

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

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

所以如果我想存储祖先模型允许的更多信息,我会这样做:

class SiteLongName(Site):
    long_name = models.CharField(max_length=60)
Run Code Online (Sandbox Code Playgroud)