Arm*_*ués 6 migration django unique-key django-south custom-fields
在我的Django模型中,我有两个字段name(常规CharField)和slug一个自定义字段,它根据字段定义中传递的字段名称生成slug,在这种情况下我用name它.
首先,该模型只有该name字段,具有相应的迁移和所有.然后我需要添加slug字段,因此遵循南方惯例,我添加了slug字段unique=False,创建模式迁移,然后创建数据迁移,设置unique=True并为最后一次更改创建另一个迁移.
由于slug的值是在模型保存上生成的,在forwards数据迁移的方法中,我所做的是迭代返回的查询集orm['myapp.MyModel'].objects.all()并save()在每个实例上调用方法.
但是从未产生slug字段的价值.在IPython会话下,我做了同样的事情,但引用模型from myapp.models import MyModel,并且工作.使用一些调试语句,打印type由South的orm dict返回的模型显示真实的类,它似乎不是由南方动态构建的假模型.
slug字段在pre_save方法时创建它的值.如何强制在数据迁移期间调用它?我需要确保值的唯一性,以便在以后的模式迁移中应用索引时,列不包含重复值.
谢谢!
BTW:slug字段类确实定义了south_field_triple所以南方玩得很好.
编辑:请看我的答案.但更像是一个答案,感觉更像是一个黑客.有没有更好/正确的方法来做到这一点?
我通过获取模型字段实例并直接调用它来临时解决了这个问题pre_save:
class Migration(DataMigration):
def forwards(self, orm):
"Write your forwards methods here."
# Note: Remember to use orm['appname.ModelName'] rather than "from appname.models..."
for myobj in orm['myapp.MyModel'].objects.all():
slug_field = myobj._meta.get_field_by_name('slug')[0]
myobj.slug = slug_field.pre_save(myobj, add=False)
myobj.save()
Run Code Online (Sandbox Code Playgroud)
然而,在自定义字段中考虑这一点感觉很麻烦......
| 归档时间: |
|
| 查看次数: |
1201 次 |
| 最近记录: |