python - 如何修改 Django 模型?

标签 python django django-models

如果我想改变,例如Django 的站点模块:

from django.contrib.sites.models import Site

我将如何在我的项目中做到这一点?我是继承类还是如何更改或添加一些代码?

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

最佳答案

您可以通过继承添加一个字段

如果您仍然需要保留对原始 Site 对象/行的引用,您可以使用 multi-table inheritance

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 will raise a FieldError if you override any model field in any ancestor model .

而且我不会冒险为此编写自定义数据库迁移,因为如果您更新 Django,您可能会遇到与 Site 模型的模式冲突。

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

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

关于python - 如何修改 Django 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35198113/

相关文章:

python - 为什么 apply(type) 在 pandas 中得到不一致的结果?

c++ - Python ctypes : how to free memory? 获取无效指针错误

python - 在 django "login() missing 1 required positional argument: ' 用户中出现此错误“”

python - 如何在 django 的两边设置多对多字段空白=真

python - Pandas 基于 key 格式化 csv 数据

python - 属性错误 : 'module' object has no attribute 'model'

mysql - Django 按日期分组和 SUM 值包括 SUM 零

python - 发生错误时如何从 Django shell 获取返回值 !=0

用于存储用户日常事件的 SQL 表结构

python click 应用程序失败并显示 "missing argument"但无法找到问题