我的Blog
模型有AutoSlugField
,它使用Blog.__unicode__()
方法。在
在数据迁移之后,Blog
实例的slug设置为blog-object-<number>
,而不是<year>-<month>-<day>
。似乎忽略了定义Blog.__unicode__()
。在
如何正确迁移Blog
模型?在
在模型字段.py公司名称:
class AutoSlugField(models.CharField):
def pre_save(self, blog, *args, **kwargs):
return slugify(unicode(blog))
在模型.py公司名称:
^{pr2}$迁移:
from south.v2 import DataMigration
class Migration(DataMigration):
def forwards(self, orm):
for blog in orm.Blog.objects.all():
blog.title = blog.title.replace('django', 'Django')
blog.save()
South什么也不做,只是在表中添加列,django在其中没有任何作用。因此,当您运行迁移时,django模型保存方法不会被调用,因此不会调用pre-save方法。South只在数据库上工作,也就是说,您可以提供一些属性,如default value、nullable等,这些属性可以在db级别设置。若要将slug添加到数据库中的现有记录,请创建util函数,该函数将对字段进行分段处理或编写数据迁移。在
我已经更新到south0.7.6并使用了来自South documentation的解决方案。只需添加
to_python()
和get_prep_value()
方法,使slug
字段保持原样。在相关问题 更多 >
编程相关推荐