0

私の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))

models.py:

class Blog(models.Model):
    title = models.CharField(max_length=255)
    created = models.DateTimeField(auto_now_add=True)
    slug = AutoSlugField(max_length=50)

    def __unicode__(self):
        return self.created.strftime('%Y-%m-%d')

移行:

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() 
4

2 に答える 2

1

South はテーブルに列を追加するだけで、django はその役割を果たしません。したがって、移行を実行すると、django モデルの保存メソッドは呼び出されないため、事前保存メソッドは呼び出されません。South はデータベースでのみ機能します。つまり、デフォルト値、nullable などの属性を提供できます。これらは db レベルで設定できます。db の既存のレコードにスラッグを追加するには、フィールドをスラッグ化するか、データ移行を記述する util 関数を作成します。

于 2013-12-15T18:55:53.673 に答える