【问题标题】:Django, How does models.py under auth folder create initial tables when you migrate very first time?Django,第一次迁移时,auth 文件夹下的 models.py 如何创建初始表?
【发布时间】:2017-01-30 13:02:30
【问题描述】:

如果您在 Django 中创建新项目后第一次迁移,您会发​​现 Django 创建如下表。

auth_group
auth_group_permissions
auth_permission
auth_user
auth_user_groups
auth_user_user_permissions
django_admin_log
django_content_type
django_migrations
django_session

现在我了解到这些表是因为 settings.py 中 INSTALLED_APPS 下的行而创建的。

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

所以我开始查看 auth 文件夹下的 models.py(在我安装的 Django 文件夹中)。我预计models.py中会有六个类。因为我通过 ORM(Ojbejct Relation Mapping) 了解到 Class 转表。

auth_group
auth_group_permissions 
auth_permission
auth_user
auth_user_groups
auth_user_user_permissions

我可以在 auth 文件夹下的 models.py 中找到名为“Permission”的类、名为“Group”的类和名为“User”的类。我认为那些表'auth_permission','auth_group'和'auth_user'。那么其他呢?(auth_group_permissions、auth_user_groups、auth_user_user_permissions)我想了解这些表是如何由 Django 创建的(auth 文件夹中的models.py)。应该在 models.py 中查看哪里来理解这一点?

如果我能理解的话,我希望我能理解其他表是如何创建的(django_admin_log、django_content_type、django_migrations、django_session)。如果您还可以解释 Django 如何创建名为“django_migrations”和“django_session”的表,我将不胜感激。

提前谢谢你。祝你今天过得愉快。 enter image tables showing in pgAdmin3

【问题讨论】:

标签: python django django-models migration


【解决方案1】:

这很容易解释。

auth_user_groups
auth_group_permissions
auth_user_user_permissions

是关系表。用于存储有关模型表如何关联的信息。

例如auth_user_groups 存储用户和组的关联方式。 如果你这样做了

SELECT * FROM auth_user_groups;
|id|user_id|group_id|
....

在这里我们可以看到哪些组与哪些用户相关。

所以当你在模型上使用ManyToManyField 时,基本上 django 会自动创建这样的表

回复评论 第一次调用./manage.py migrate 时会自动创建Django 迁移表。此表存储应用迁移的历史记录。迁移模型见django/db/migrations/recorder.py。此模型在运行新迁移时使用,以查看在此命令运行中应用了哪些以及应该应用哪些。而且这个模型是核心 django 功能的一部分,这就是为什么你不需要在INSTALLED_APPS 中添加它,因为INSTALLED_APPS 只包含可插入的应用程序。如果需要,您可以在项目中包含/排除。

【讨论】:

  • 首先,感谢您的回答!我想测试我是否正确理解了您的答案。我自己几乎没有测试过。我制作了新项目和新应用程序。我在新的 app 文件夹中的 models.py 中创建了两个类。例如)我创建了两个名为“User”和“Mothertb”的类。我在 Mothertb 类中添加了如下属性。 name = models.CharField... owner = models.ForeignKey(user, null=True) 然后我做了迁移。我预计将创建三个表。一个是User表,Mothertb表和一个由ForeignKey创建的表。
  • 因为你的回答“所以当你在模型上使用 ForeignKey、ManyToManyField 和 OneToOneField 时,基本上 django 会自动创建这样的表”
  • 对不起。我误导你。我住的地方还是早上))它只适用于ManyToManyFields
  • 我尝试使用 ManyToManyField 而不是 ForiegnKey。它发现创建了新表。 fktest_mothertb、fktest_mothertb_owner、fktest_user。 fktest_mothertb_owner 已创建!所以 auth_user_groups、auth_group_permissions 和 auth_user_user_permissions 就是以这种方式创建的。另一个问题在这里。我希望你不要说我需要为此提出新问题。 django_migration 表怎么样???因为当我搜索时,我在 django\contrib 文件夹下找不到名为“migration”的文件夹。我找不到 django_migration 表的 models.py。
  • @JAEMYUNISGRANDPA 更新答案
猜你喜欢
  • 2015-06-27
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
相关资源
最近更新 更多