2016-05-18 2 views
7

内の既存のエントリのslugフィールドデータを生成し、私は、Djangoのモデルを作成しました:ジャンゴ:いくつかの時間前にデータベース

class Product(models.Model): 
    name = models.CharField(verbose_name=_('Nome'), max_length=100) 
    description = models.CharField(verbose_name=_('Descrizione'), blank=True, default="") 

今私はslugフィールドを挿入したいと思います:

class Product(models.Model): 
    name = models.CharField(verbose_name=_('Nome'), max_length=100) 
    slug = AutoSlugField(populate_from='name', unique=True) 
    description = models.CharField(verbose_name=_('Descrizione'), blank=True, default="") 

私の問題はありますマイグレーションを作成すると、Djangoはslugフィールドのデフォルト値を挿入するように要求します。

私のアイデアは、データベース内の既存のエントリの移行中にスラッグを生成することです、それを行う方法がありますか?

ありがとうございます!

+0

は '' defのAutoSlugField'ことをいault' param? – Gocht

答えて

9

これは私が同じ状況で持っているコードです。

models.py:真

slug = AutoSlugField(null=True, default=None, unique=True, populate_from='name') 

注ヌル=私のマイグレーションでは一意のフィールド と互換性があり、私は手動で移行ファイル

を編集することで、データの移行を追加しています

0007_my_migration.py

def migrate_data_forward(apps, schema_editor): 
    for instance in MyModel.objects.all(): 
     print "Generating slug for %s"%instance 
     instance.save() # Will trigger slug update 

def migrate_data_backward(apps, schema_editor): 
    pass 

class Migration(migrations.Migration): 
... 

    operations = [ 
     migrations.AddField(
      model_name='my_model', 
      name='slug', 
      field=autoslug.fields.AutoSlugField(null=True, default=None, editable=False, populate_from='name', unique=True), 
      preserve_default=False, 
     ), 
     migrations.RunPython(
      migrate_data_forward, 
      migrate_data_backward, 
     ), 
    ] 
+0

ありがとう!これは完全に動作します:) – markdesign

関連する問題