【问题标题】:Django migrations - AddField is actually removing itDjango 迁移 - AddField 实际上正在删除它
【发布时间】:2018-09-19 20:47:20
【问题描述】:

我有一个 django 博客项目,最近对我的本地环境进行了更改,所以现在我手动迁移到我的生产服务器。我已经几乎完成了这个,但是在 psql / postgres 中我使用命令:

\d个posts_post

外键字段:

“类别”(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)
            ),
           ]

但是,当我运行 migrate 命令时,它实际上会删除该字段。

a) 为什么经理删除我的字段而不是添加它?

b) 尽管一开始显然不存在,但为什么要这样做?

【问题讨论】:

  • 您的数据库中是否已有该字段?你检查了吗
  • 应该有,但是当我运行 \d posts_post 查看表中有哪些字段时,它没有显示。虽然实际上 - 有一个 category_id 字段 - 是这样吗?那是因为它是外键而不是实际的普通字段吗?
  • 如果你看到category_id,那么它是FK映射字段。您看不到与您提供的名称相同的外键。后缀为_id
  • 非常感谢 :-)

标签: django postgresql django-models psql django-migrations


【解决方案1】:

如果您看到 category_id,那么它是 FK 映射字段。您看不到与您在models.py 中指定的名称相同的外键。它将在数据库级别以_id 为后缀。

但是当您使用 django orm 时,您将只使用您在 models.py 中提供的字段名称

【讨论】:

    猜你喜欢
    • 2018-12-15
    • 2015-08-18
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2016-10-02
    • 2020-01-19
    • 2019-12-16
    • 2018-04-12
    相关资源
    最近更新 更多