Python 如何修改Django模型?

Python 如何修改Django模型?,python,django,django-models,Python,Django,Django Models,如果我想更改Django的站点模块: from django.contrib.sites.models import Site 我将如何在我的项目中做到这一点?我是子类还是做什么来更改或添加一些代码 还是只创建一个新模型?您可以通过继承添加一个字段 如果仍需要保留对原始站点对象/行的引用,可以使用 这允许您拥有常规的Site对象,这些对象可以通过您的MySite模型进行扩展,在这种情况下,您可以通过Site.MySite访问额外的字段和方法,例如Site.MySite.new\u字段 通过模型

如果我想更改Django的站点模块:

from django.contrib.sites.models import Site
我将如何在我的项目中做到这一点?我是子类还是做什么来更改或添加一些代码

还是只创建一个新模型?

您可以通过继承添加一个字段 如果仍需要保留对原始站点对象/行的引用,可以使用

这允许您拥有常规的
Site
对象,这些对象可以通过您的
MySite
模型进行扩展,在这种情况下,您可以通过
Site.MySite
访问额外的字段和方法,例如
Site.MySite.new\u字段

通过模型继承,您不能更改祖先字段 通过继承,您不能隐藏祖先字段,因为

我不会冒险为此编写自定义DB迁移,因为如果您更新Django,可能会与站点模型发生模式冲突

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

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

“修改”是什么意思?如果您需要扩展
站点
,子类化是一种方法。如果我需要更改Django模型中的现有字段,请单击此处。就像我在bakkal的回答中下面的评论一样。事实上,你不能这样做:。你要么需要对
站点
进行子类化,要么让
名称
字段保持原样,然后创建一个新字段(比如,
自定义名称
),让第一个字段不使用,要么从头开始创建你自己的模型。事实上,这个问题有一个答案,那太好了。虽然我仍然想知道是否需要更改站点模型中当前为的字段:
name=models.CharField(u('display name'),max_length=50)
来更改
max_length=60
。我该怎么做?只需在新的多表继承中再次添加它?
class SiteLongName(Site):
    long_name = models.CharField(max_length=60)