python - Django 模型将短语附加到 app_label

标签 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 但我无法在内部元类中访问当前应用程序的标签。

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

最佳答案

If my apps name is my_app than the table names are becoming my_app_mymodel and my_app_mymodeltemp

评论

app_labelModelINSTALLED_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/

相关文章:

python - Numpy intersect1d 与矩阵作为元素的数组

javascript - CORS header 不适用于 Django 项目

sql - Django 通用关系和 ORM 查询

python - Django Charfield null=未引发 False 完整性错误

python - 在 Django 的自定义管理器中面临问题

python - 如何在 Python 中读取类型为 complex64 值的二进制文件

java - 归并排序的开放区间的中点

用于学习和教学的 Python playTone(freq, duration) 命令

python - django中的可选获取参数?

python - 在 Django 中使用这种多对多关系之前,对象需要具有字段 "id"的值