Django South数据迁移pre_save()使用模型的

2024-05-01 12:56:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我的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() 

Tags: py模型self名称titlesavedeform
2条回答

South什么也不做,只是在表中添加列,django在其中没有任何作用。因此,当您运行迁移时,django模型保存方法不会被调用,因此不会调用pre-save方法。South只在数据库上工作,也就是说,您可以提供一些属性,如default value、nullable等,这些属性可以在db级别设置。若要将slug添加到数据库中的现有记录,请创建util函数,该函数将对字段进行分段处理或编写数据迁移。在

我已经更新到south0.7.6并使用了来自South documentation的解决方案。只需添加to_python()get_prep_value()方法,使slug字段保持原样。在

class AutoSlugField(models.CharField):
    def pre_save(self, blog, *args, **kwargs):
        return slugify(unicode(blog))

    def to_python(self, value):
        return value

    def get_prep_value(self, value):
        return value

相关问题 更多 >