【问题标题】:Does changing a django models related_name attribute require a south migration?更改 django 模型 related_name 属性是否需要南迁移?
【发布时间】:2013-11-16 23:36:34
【问题描述】:

我有一个带有 ForeignKey 的简单 django 模型

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

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

【问题讨论】:

    标签: django django-models django-south


    【解决方案1】:

    您不需要迁移。

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

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

    一些additional documentation here关于related_name的用法

    【讨论】:

    • 那为什么Django在related_name发生变化时会创建一个迁移文件呢?
    • @MarshallX 这张票可能会阐明您的问题code.djangoproject.com/ticket/25601。但我仍然想知道有一种方法可以标记这样的迁移在只更改相关名称时不应发出任何 sql(sqlmigrate)。
    • 这里是代码首先下降:github.com/django/django/blob/… 然后重建:github.com/django/django/blob/…
    • 这个答案显然是错误的!是的,您需要迁移。 MigrationAutodetector 将检测迁移。
    【解决方案2】:

    以上接受的答案现已过时。

    当外键字段的相关名称发生变化时,Django 会创建和alter field foreign_key_field on model 迁移。

    【讨论】:

    • 我相信它也会导致,至少在 MySQL 中,一个 DROP INDEX 然后是 CREATE INDEX 语句。 Django 的问题跟踪器中有一个关于此的问题。 code.djangoproject.com/ticket/25253
    猜你喜欢
    • 2014-07-01
    • 1970-01-01
    • 2020-09-19
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 2018-04-20
    • 1970-01-01
    相关资源
    最近更新 更多