如果我想改变,例如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/