【问题标题】:Generate slug field data for existing entries in database为数据库中的现有条目生成 slug 字段数据
【发布时间】:2012-10-25 23:14:55
【问题描述】:

我正在使用带有 South 的 Django 1.4 进行迁移。我刚刚在我的一个模型中添加了一个 slug 字段并进行了迁移。 slug 字段会自动填充所有新对象,并且可以完美运行。

我想知道,有什么方法可以强制 Django 为我迁移之前的所有现有数据创建 slug 字段条目...

*编辑 我在 admin.py 中用这一行填充我的 slug 字段

prepopulated_fields = {"slug": ("name","price")}

【问题讨论】:

    标签: python django slug


    【解决方案1】:

    当我将 slug 字段添加到现有表时,我使用了如下所示的 South 数据迁移:

    from django.template.defaultfilters import slugify
    
    class Migration(DataMigration):
    
        def forwards(self, orm):
            for obj in orm.MyModel.objects.filter(slug__isnull=True):
                slug = slugify(obj.name)
                obj.slug = slug
                suffix = 2
                while orm.MyModel.objects.filter(slug=obj.slug).exists():
                    obj.slug = "%s-%d" % (slug, suffix)
                    suffix = suffix + 1
                obj.save()
    
    
        def backwards(self, orm):
            pass # no need to change anything
    

    【讨论】:

    • 我跑了manage.py datamigration <app> <description>,然后把上面的代码放到了South自动生成的<app>/migrations/????_<description>.py的模板文件中。然后我正常运行生成的迁移。
    猜你喜欢
    • 2016-09-15
    • 2021-09-23
    • 2016-05-06
    • 2016-06-24
    • 2015-07-13
    • 2016-02-22
    • 2014-10-20
    • 2011-03-29
    • 1970-01-01
    相关资源
    最近更新 更多