2

移行のために南で Django 1.4 を使用しています。モデルの 1 つにスラッグ フィールドを追加し、移行を行いました。slug フィールドは、すべての新しいオブジェクトに対して自動的に入力され、完全に機能します。

Django に、移行前のすべての既存データのスラッグ フィールド エントリを強制的に作成させる方法はあるのでしょうか...

*編集 admin.py のこの行をスラッグ フィールドに入力しています。

prepopulated_fields = {"スラッグ": ("名前","価格")}

4

1 に答える 1

3

既存のテーブルに 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
于 2012-11-06T02:56:34.447 に答える