Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何自动向所有django模型表添加默认列_Python_Django_Django Models - Fatal编程技术网

Python 如何自动向所有django模型表添加默认列

Python 如何自动向所有django模型表添加默认列,python,django,django-models,Python,Django,Django Models,我想将以下4列添加到所有表中: 创作名称 肌酐 修订名称 修订日期 目前,我的做法如下: from django.db import models class Table_1(models.Model): column1 = models.CharField(max_length=64) column2 = models.CharField(max_length=64) creationname = models.CharField(max_length=64)

我想将以下4列添加到所有表中:

  • 创作名称
  • 肌酐
  • 修订名称
  • 修订日期
目前,我的做法如下:

from django.db import models


class Table_1(models.Model):
    column1 = models.CharField(max_length=64)
    column2 = models.CharField(max_length=64)
    creationname = models.CharField(max_length=64)
    creationdate = models.DateTimeField('creation date', auto_now_add=False)
    revisionname = models.CharField(max_length=64)
    revisiondate = models.DateTimeField('revision date', auto_now=False)

class Table_2(models.Model):
    column1 = models.CharField(max_length=64)
    column2 = models.CharField(max_length=64)
    creationname = models.CharField(max_length=64)
    creationdate = models.DateTimeField('creation date', auto_now_add=False)
    revisionname = models.CharField(max_length=64)
    revisiondate = models.DateTimeField('revision date', auto_now=False)

...

class Table_n(models.Model):
    column1 = models.CharField(max_length=64)
    column2 = models.CharField(max_length=64)
    creationname = models.CharField(max_length=64)
    creationdate = models.DateTimeField('creation date', auto_now_add=False)
    revisionname = models.CharField(max_length=64)
    revisiondate = models.DateTimeField('revision date', auto_now=False)
这是否可以通过自动方式获取,以便将4列自动附加到每个表中?
注意:对于django项目的所有表,而不仅仅是单个django应用程序的表,这也是可以实现的吗


如果这违反了django的设计理念,请让我也知道

创建一个基础模型。然后扩展该模型

class BaseTable(models.Model):
    creationname = models.CharField(max_length=64)
    creationdate = models.DateTimeField('creation date', auto_now_add=True)
    revisionname = models.CharField(max_length=64)
    revisiondate = models.DateTimeField('revision date', auto_now=False)

    class Meta:
        abstract = True


class Table1(BaseTable):
     column1 = models.TextField()
     column2 = models.TextField()
您可以使用and继承来执行此操作:

class ModelWithRevisions(models.Model):
    creationname = models.CharField(max_length=64)
    creationdate = models.DateTimeField('creation date', auto_now_add=False)
    revisionname = models.CharField(max_length=64)
    revisiondate = models.DateTimeField('revision date', auto_now=False)

    class Meta:
        abstract = True


class OtherModel(ModelWithRevisions):
    column1 = models.CharField(max_length=64)
    column2 = models.CharField(max_length=64)


请注意,如果您试图跟踪模型的历史记录,或者跟踪最后一次更改模型的人,您可能会希望这样做。

您也可以使用感谢提供的审核参考。乍一看,它们似乎是面向数据模型更改的。对吗
注意:我打算使用应用程序数据的创建/修订字段,例如,当有人由于标准应用程序行为而更改数据(而非数据模型)时
您是否会放置这种类型的通用数据模型扩展,它会影响项目目录中的所有选项卡(与settings.py文件的级别相同),例如作为models.py并从那里继承?@udo否,我发送给您的链接中列出的包关心的是数据的更改,而不是数据模型的更改。他们似乎就是你想要的。如果您仍然选择使用我上面提供的代码,我建议您将其放在单独的应用程序中。您知道在定义模型时是否可以定义db列序列吗?显然,django在处理列序列时应用了以下逻辑:PKs、模型扩展、其他字段。。。始终按照定义的顺序。