Django更改现有Oracle DB模型的自动表名

时间:2018-07-17 06:46:59

标签: django django-models cx-oracle

我试图在连接到现有Oracle数据库的Django实例中更优雅地表达我的数据库表。我们有大量现有的表,我想简单地表述为Django模型。当前,我有一个抽象基类,所有其他模型都继承自该基类。例如,

class PlatformTable(models.Model):
    id = models.IntegerField(primary_key=True)
    creation_date = models.DateTimeField()
    last_modified_date = models.DateTimeField()

    class Meta:
        abstract = True
        db_tablespace = 'platform'
        managed = False

然后我们有一个从该抽象表继承的实际Account。我在Account的Meta类中生成了正确的表名。

class Account(PlatformTable):
    ext_ref = models.CharField(max_length=40)

    class Meta(PlatformTable.Meta):
        db_table = table_name("Account")

def table_name(name):
    """Will convert a CamelCase class name to CAMEL_CASE so we can use it for
    oracle table names."""
    s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
    table_name = re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).upper()
    return u'"{schema}"."{table_name}"'.format(schema=SCHEMA, table_name=table_name)

是否有一种方法可以更改抽象模型,以便在子类这样子化时自动在Meta中生成正确的表名?理想情况下,我的帐户模型应该是

class Account(PlatformTable):
    ext_ref = models.CharField(max_length=40)

到目前为止,我发现this(这不是一个很好的解决方案)和this(这是行不通的)。

是否可以扩展数据库连接器以即时重写表名?

0 个答案:

没有答案