如何修改Django模型?

发布于 2021-01-29 16:51:50

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

from django.contrib.sites.models import Site

我将如何在我的项目中做到这一点?我是子类的,还是要做什么更改或添加一些代码?

还是我只是创建一个新模型?

关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以通过继承添加字段

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

    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模型发生架构冲突。

    因此,如果我想存储祖先模型允许的更多信息,这就是我会做的事情:

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看