我正在进行一些外部集成以将数据保存到 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
但我无法在内部元类中访问当前应用程序的标签。
此外,我可以通过为这种情况创建新的元类来处理这个问题。我正在寻找一种更简单的方法。
最佳答案
If my apps name is my_app than the table names are becoming my_app_mymodel and 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)
关于python - Django 模型将短语附加到 app_label,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40806365/