在我的 Django 模型中,我有两个字段,name
(一个常规CharField
)和slug
一个自定义字段,它根据字段定义中传递的字段名称生成 slug,在本例中我name
用于此。
首先,该模型只有name
字段,以及相应的迁移和所有内容。然后我需要添加该slug
字段,因此按照 South 约定,我添加了 slug 字段unique=False
,创建了模式迁移,然后创建了一个数据迁移,设置unique=True
并为最后一次更改创建另一个迁移。
由于 slug 的值是在模型保存时生成的,因此forwards
在数据迁移的方法中,我所做的是遍历返回的查询集并在每个实例上orm['myapp.MyModel'].objects.all()
调用该方法。save()
但是 slug 字段的值永远不会生成。在 IPython 会话下,我做了同样的事情,但将模型引用为from myapp.models import MyModel
, 并且工作正常。使用一些调试语句,打印type
South 的 orm dict 返回的模型的 显示真实类,它似乎不是 South 动态构建的假模型。
slug 字段在方法时创建它的值pre_save
。如何在数据迁移期间强制调用它?我需要确保值的唯一性,以便在以后的架构迁移中应用索引时,列不包含重复值。
谢谢!
顺便说一句:蛞蝓字段类确实定义了south_field_triple
所以南方玩得很好。
编辑:请看我的回答。但更像是一个答案,感觉更像是一个黑客。有没有更好/正确的方法来做到这一点?