Миграция Django не вызывает переопределенный метод save ()? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть модель 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

Я также отменил миграцию и повторно запустил ее, установив трассировку (import ipdb; ipdb.set_trace()) в переопределенном методе save(), но это не привело к тому, что Python выпал в отладчик, подтверждая, что этот метод не является называется.

Почему переопределенный метод save() не вызывается? Нужно ли повторять код в функции generate_name_slugs?

1 Ответ

0 голосов
/ 02 октября 2018

Это должно помочь для SessionType ... SessionCategory можно изменить так же ...

def generate_name_slugs(apps, schema_editor):
    import lucy_web.models as m
    for session_type in m.SessionType.objects.all():
        session_type.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...