Django Model将短语附加到app_label

时间:2016-11-25 13:39:04

标签: python django django-models

我正在进行一些外部集成以将数据保存到Django模型。整合需要一些时间。所以我想创建一些临时的重复模型。我在这些临时模型中创建数据。完成此过程后,我将数据传输到实际模型。通过这样做,我不会给系统任何停机时间。

class MyModelAbstract(models.Model):
    my_field = models.CharField(max_length=50)
    ...

    class Meta:
        abstract = True

class MyModel(MyModelAbstract):
    is_active = models.BooleanField(default=True)

class MyModelTemp(MyModelAbstract):
    pass

如果我的应用名称为my_app,则表名称变为my_app_mymodelmy_app_mymodeltemp。我想把它命名为my_app_tmp_mymodeltemp。我可以通过以下方式实现这一目标:

class MyModelTemp(MyModelAbstract):
    class Meta:
        app_label = 'my_app_tmp'

但我不想静态写app_label。如果我更改名称,我不想手动改变app_label。我想像app_label = '%s_tmp' % app_label那样指定它,但我无法访问内部Meta类中的当前应用程序标签。

此外,我可以通过为此案例创建新的元类来处理此问题。我正在寻找一种更简单的方法。

1 个答案:

答案 0 :(得分:2)

  

如果我的应用名称是my_app,则表名称变为my_app_mymodel和my_app_mymodeltemp

<强>注释

app_label超出Model时,会使用

INSTALLED_APPS。现在你的意图(假设)你需要另一个名为prefix tmp的表。为此,您需要db_table。我们可以通过将此代码段放在每个模型下来实现它。

from django.db import connection

Model._meta.db_table = Model._meta.db_table+ "_tmp"
with connection.schema_editor() as schema:
    schema.create_model(Model)