Django: генерация данных поля 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.
моя идея состоит в том, чтобы создать пули во время миграции для существующих записей в базе данных, есть способ сделать это?
спасибо!
1 ответов
это код, который у меня есть для той же ситуации.
models.py:
slug = AutoSlugField(null=True, default=None, unique=True, populate_from='name')
обратите внимание на null=True, который совместим с уникальным полем В моих миграциях я добавляю миграцию данных, вручную редактируя файл миграции
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,
),
]