如何控制Django migrate创建的表名

JET*_*JET 4 mysql django amazon-web-services amazon-elastic-beanstalk makemigrations

上下文:Django 1.7; MySQL 5.6.23; 在AWS上运行(不确定Linux操作系统版本)

我有一个Django 1.7项目.当我在我的Windows笔记本电脑上进行本地构建数据库的初始makemigrations时,我得到的表格以我的app名称为前缀,如下所示:

myapp_person(适用于Django class Person(models.Model))

myapp_personmap(适用于Django class PersonMap(models.Model))

当我进行迁移并迁移到AWS Linux服务器时,这些表的命名方式如下:

MyApp_person

MyApp_personmap

注意应用程序名称前缀的意外CamelCase和其余表名称的预期小写.

我的问题:

  1. 什么控制表的appname前缀(例如"myapp_person"中的"myapp_")?
  2. 如何让迁移在AWS上使用全部小写,就像在我的Windows笔记本电脑上本地一样?

Rah*_*pta 9

要使用您自己的自定义表名,您需要db_table在models Meta选项中定义一个参数.

从关于表名的Django文档:

要覆盖数据库表名,请使用db_tableMeta类中的参数.

Query-1:什么控制appname前缀?

如果尚未db_table在模型Meta类中定义选项,则Django会使用模型的类名自动派生名称app label.

来自官方文档:

Django自动从模型类的名称和包含它的应用程序派生数据库表的名称.模型的数据库表名是通过建立加盟模式的“app label” -你在使用的名称manage.py startapp- 到模型的类名,两者之间有下划线.

例如:

如果您xyz创建了一个应用程序manage.py startapp xyz,则定义为类的模型Abc将具有名为的数据库表xyz_abc.

Query-2:使用自定义表名创建表

如果要使用自定义表名,则需要db_table在模型中使用该选项Meta.

在这里,您可以用小写显式定义db表名.

class Person(models.Model):

    class Meta:
        db_table = '"myapp_person"' # define your custom name

class PersonMap(models.Model):

    class Meta:
        db_table = '"myapp_personmap"' # define your custom name
Run Code Online (Sandbox Code Playgroud)