Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在django模型中,如何使所有表名不具有应用程序标签?_Database_Django_Django Models - Fatal编程技术网

Database 在django模型中,如何使所有表名不具有应用程序标签?

Database 在django模型中,如何使所有表名不具有应用程序标签?,database,django,django-models,Database,Django,Django Models,在我开始用django为它编写web界面之前,我有一个已经被其他应用程序使用的数据库。表名遵循简单的命名标准,因此django模型客户应该映射到数据库中的表“Customer”。同时,我正在添加新的表/模型。由于我发现每次我必须在其他应用程序中编写查询(django的ORM对他们来说绝对不够)时使用app_customer很麻烦,而且我不想重命名现有的表,那么让django应用程序中的所有模型都使用表而不使用applabel_的最佳方法是什么,除了向每个模型添加一个带有db_table=的元类之

在我开始用django为它编写web界面之前,我有一个已经被其他应用程序使用的数据库。表名遵循简单的命名标准,因此django模型客户应该映射到数据库中的表“Customer”。同时,我正在添加新的表/模型。由于我发现每次我必须在其他应用程序中编写查询(django的ORM对他们来说绝对不够)时使用app_customer很麻烦,而且我不想重命名现有的表,那么让django应用程序中的所有模型都使用表而不使用applabel_的最佳方法是什么,除了向每个模型添加一个带有db_table=的元类之外


有什么理由我不应该这样做吗?我只有一个web应用程序需要访问此数据库,其他所有应用程序都不使用django模型。

您可以在模型类中添加一个
Meta
类,并在其中指定表名为
db\u table

在:


这个可能会起作用(我还没有测试过)

然后从CustomModel继承所有模型。
虽然我不确定这是否值得,但为了避免在Meta中指定它。

不使用Meta类的原因是。。。?这听起来像是你在说,“我想开车,但我不想用我的手。”原因是,django以这种方式自动命名表格,我应该能够禁用它,并以我的方式自动命名。我甚至不想要深奥的名称,只想要类的名称,就像django一样,除了applabel_uuu位。将Meta:db_table=className.lower()添加到每个类似乎既愚蠢又重复。当前项目有160多个模型表,这是值得的。如果有关于它是否会继续得到支持的文档,那就太好了。在我的实验中,这种情况似乎没有发生得足够早,不会影响真正的表名。但是,涉及先前运行的元类的技术似乎确实有效:
class Meta:
    db_table = 'my_author_table'
class CustomModel(Model):
    def __init__(self, *args, **kwargs):
        self._meta.db_table = self.__class_.__name__.lower()
        super(CustomModel, self).__init__(*args, **kwargs)