Python Django模型将短语附加到app_标签
我正在进行一些外部集成,以将数据保存到Django模型。整合需要一些时间。所以我想创建一些临时的复制模型。我将数据创建到这些临时模型中。完成该过程后,我将数据传输到实际模型。通过这样做,我不会给系统带来任何停机时间Python Django模型将短语附加到app_标签,python,django,django-models,Python,Django,Django Models,我正在进行一些外部集成,以将数据保存到Django模型。整合需要一些时间。所以我想创建一些临时的复制模型。我将数据创建到这些临时模型中。完成该过程后,我将数据传输到实际模型。通过这样做,我不会给系统带来任何停机时间 class MyModelAbstract(models.Model): my_field = models.CharField(max_length=50) ... class Meta: abstract = True class My
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\u app
,则表名将变成my\u app\u mymodel
和my\u app\u mymodeltemp
。我想把它命名为my\u app\u tmp\u mymodeltemp
。我可以通过以下方式实现这一点:
class MyModelTemp(MyModelAbstract):
class Meta:
app_label = 'my_app_tmp'
但是我不想静态地编写app\u标签。如果我更改名称,我不想手动更改app\u标签
。我想像app\u label='%s\u tmp'%app\u label
那样指定它,但我无法访问内部元类中当前应用的标签
此外,我可以通过为这种情况创建新的元类来处理这个问题。我正在寻找一种更简单的方法
如果“我的应用程序名称”是“我的应用程序”,则表名称将成为“我的应用程序”mymodel和“我的应用程序”mymodeltemp
评论
app\u标签
用于型号
在已安装的应用程序
之外的情况。现在,您的意图(假设)是需要另一个名为prefixtmp
的表。为此,您需要db\u表
。我们可以通过将这个片段放在每个模型下来动态地完成它
from django.db import connection
Model._meta.db_table = Model._meta.db_table+ "_tmp"
with connection.schema_editor() as schema:
schema.create_model(Model)
这样做是不可能的,因为您需要进行迁移才能更改实际的表名,并且迁移不能是动态的。我不想更改迁移行为。在注册模型之前,我想在创建新类的过程中更改app_标签。因此,它不会影响迁移。需要更好地解释该注释。我想要的是使用来自app\u config
的原始值更改app\u标签。我想按模型来做,而不是一个模块中的所有模型。由于app_标签设置为Meta
类,我无法访问Meta
类中的原始值。我的app位于已安装的APPS
中,我通常对表命名感到满意。但是对于一些表,我想区别于其他表,但不会丢失app_标签。我希望tmp
介于应用程序标签和型号名称之间。这样,在管理产品时,我将按顺序查看它们。我不确定,但在我看来,你的建议可能会破坏我的迁移!?恐怕不会。无论如何,将迁移文件保存在git或版本控制中。