2016-05-18 85 views
7

前段時間我創建了一個Django的模型現有條目廢料場數據:Django的:生成數據庫

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

現在我想插入塞場:

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字段插入默認值。

我的想法是在數據庫中的現有條目的遷移過程中生成一個slug,有辦法做到這一點?

謝謝!

+0

這是否'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