更改Django模型的related_name属性是否需要进行South迁移?

19

我有一个简单的Django模型,其中包含一个ForeignKey

class FooModel(models.Model):
    foo = models.ForeignKey('Foo', related_name="foo_choices")
    bar = models.CharField(max_length=50)

related_name属性已经存在,但我想要更改它。这种更改是否需要进行任何迁移?当我在修改related_name后运行schemamigration管理命令时,我得到了“似乎没有变化”的提示,但我想要确认一下。

2个回答

15
正如评论中所提到的,这个答案适用于非常旧的Django版本。

不需要进行迁移。

相关名称是用于从相关对象返回到此对象(反向关系)的名称。

related_name与数据库无关。它被Django的ORM用于获取查询集结果,因此如果您更改模型字段上的related_name属性,不需要进行迁移。

有关related_name用法的一些附加文档


5
当 related_name 改变时,为什么 Django 会创建一个迁移文件? - Marshall X
2
@MarshallX 这个票据可能会解答你的问题 https://code.djangoproject.com/ticket/25601 。但我仍然想知道是否有一种方法可以标记这样的迁移,当只更改related_name时不应该发出任何sql(sqlmigrate)。 - schemacs
这是代码: 首先删除: https://github.com/django/django/blob/f3a98224e6dd5f8846008512f281e452dc3b1909/django/db/backends/base/schema.py#L514 然后重新构建: https://github.com/django/django/blob/f3a98224e6dd5f8846008512f281e452dc3b1909/django/db/backends/base/schema.py#L734 - schemacs
这个答案显然是错误的!是的,你需要一个迁移。MigrationAutodetector会检测到迁移。 - dbow

12

上面被接受的答案现在已过时。

当外键字段的相关名称更改时,Django会创建并修改模型上的alter field foreign_key_field on model迁移。


我相信,至少在MySQL中,它也会引起DROP INDEX然后是CREATE INDEX语句。有一个关于此的问题在Django的问题跟踪器中开放。https://code.djangoproject.com/ticket/25253 - Adam Easterling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接