2016-05-18 52 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