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