Django 迁移 - AddField 实际上是在删除它
Django migrations - AddField is actually removing it
我有一个 django 博客项目,最近对我的本地环境进行了更改,因此现在手动迁移到我的生产服务器。我几乎完成了这个,但是在 psql / postgres 中我使用命令:
\d posts_post
外键字段:
"Category" ( models.ForeignKey('Category', null=True, blank=True))
根据终端,无处可见。我已经制作了另一个迁移文件:
from __future__ import unicode_literals
from django.db import migrations, models
import mptt.fields
import django.utils.timezone
import mptt
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('posts', '0016_remove_post_category'),
]
operations = [
migrations.AddField(
model_name="Post",
name = "Category",
field = models.ForeignKey('Category', null=True, blank=True)
),
]
然而,当我 运行 迁移命令时,它实际上删除了该字段。
a) 为什么经理删除我的字段而不是添加它?
b) 尽管一开始显然不存在,但为什么要这样做?
如果看到category_id,那就是外键映射字段。您看不到与您在 models.py
中提供的名称相同的外键。它将在数据库级别以 _id
为后缀。
但是当您使用 django orm 时,您将仅使用您在 models.py
中提供的字段名称
我有一个 django 博客项目,最近对我的本地环境进行了更改,因此现在手动迁移到我的生产服务器。我几乎完成了这个,但是在 psql / postgres 中我使用命令:
\d posts_post
外键字段:
"Category" ( models.ForeignKey('Category', null=True, blank=True))
根据终端,无处可见。我已经制作了另一个迁移文件:
from __future__ import unicode_literals
from django.db import migrations, models
import mptt.fields
import django.utils.timezone
import mptt
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('posts', '0016_remove_post_category'),
]
operations = [
migrations.AddField(
model_name="Post",
name = "Category",
field = models.ForeignKey('Category', null=True, blank=True)
),
]
然而,当我 运行 迁移命令时,它实际上删除了该字段。
a) 为什么经理删除我的字段而不是添加它?
b) 尽管一开始显然不存在,但为什么要这样做?
如果看到category_id,那就是外键映射字段。您看不到与您在 models.py
中提供的名称相同的外键。它将在数据库级别以 _id
为后缀。
但是当您使用 django orm 时,您将仅使用您在 models.py