У меня есть модель SessionCategory
, похожая на следующую:
from django.db import models
from django.utils.text import slugify
class SessionCategory(models.Model):
name = models.CharField(max_length=255, unique=True)
name_slug = models.CharField(max_length=255, null=True)
def save(self, *args, **kwargs):
if not self.name_slug:
self.name_slug = slugify(self.name)
super().save(*args, **kwargs)
Таким образом, поле name_slug
, которое я хотел бы добавить, представляет собой slugified версию поля name
.
Я запустил следующую миграцию данных:
from __future__ import unicode_literals
from django.db import migrations, models
def generate_name_slugs(apps, schema_editor):
SessionType = apps.get_model('lucy_web', 'SessionType')
for session_type in SessionType.objects.all():
session_type.save()
class Migration(migrations.Migration):
dependencies = [
('lucy_web', '0163_auto_20180627_1309'),
]
operations = [
migrations.AddField(
model_name='sessioncategory',
name='name_slug',
field=models.CharField(max_length=255, null=True),
),
migrations.RunPython(
generate_name_slugs,
reverse_code=migrations.RunPython.noop),
]
Однако, если я проверю базу данных позже, все поля name_slug
будут нулевыми:
![enter image description here](https://i.stack.imgur.com/a6D9M.png)
Я также отменил миграцию и повторно запустил ее, установив трассировку (import ipdb; ipdb.set_trace()
) в переопределенном методе save()
, но это не привело к тому, что Python выпал в отладчик, подтверждая, что этот метод не является называется.
Почему переопределенный метод save()
не вызывается? Нужно ли повторять код в функции generate_name_slugs
?