我正在进行一些外部集成以将数据保存到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_mymodel
和my_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类中的当前应用程序标签。
此外,我可以通过为此案例创建新的元类来处理此问题。我正在寻找一种更简单的方法。
答案 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)