Python 如何自动向所有django模型表添加默认列
我想将以下4列添加到所有表中: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)
- 创作名称
- 肌酐
- 修订名称
- 修订日期
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、模型扩展、其他字段。。。始终按照定义的顺序。