簡體   English   中英

如何自動將默認列添加到所有django模型表

[英]how to automatically add default columns to all django model tables

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

  • creationname
  • 創建日期
  • revisionname
  • revisiondate

目前我通過以下方式實現:

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 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)

請注意,如果您嘗試跟蹤模型的歷史記錄,或者跟蹤最后更改模型的人員,則可能需要查看現有的模型審核包

創建基本模型。 然后擴展該模型。

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM