Django:为数据库中的现有条目生成slug字段数据

Django:为数据库中的现有条目生成slug字段数据,django,model,Django,Model,不久前,我创建了一个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

不久前,我创建了一个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字段插入一个默认值

我的想法是在迁移过程中为数据库中的现有条目生成一个slug,有什么办法吗


谢谢

这是我在相同情况下的代码

型号.py

slug = AutoSlugField(null=True, default=None, unique=True, populate_from='name')
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,
        ),
    ]
请注意null=True,它与唯一字段兼容 在我的迁移中,我通过手动编辑迁移文件来添加数据迁移

0007\u my\u migration.py

slug = AutoSlugField(null=True, default=None, unique=True, populate_from='name')
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,
        ),
    ]

这是不是
AutoSlugField
a
default
param?这是个好问题,尽管您可以使用migrations.RunPython.noop来向后函数!要创建空迁移:
python manage.py makemigrations——清空您的应用程序名称