The django model persistence method is an override method not called during migration

I have a persistence override method in my model class that generates a new slug every time an object is saved.

def save(self, *args, **kwargs):
    if self.column2:
        self.slug = slugify(self.column1 + " " + self.column2)
    else:
        self.slug = slugify(self.column1)
    print slug
    super(MyModel, self).save(*args, **kwargs)

When I try to create a new object by going into the python shell, I see that the save method is being called.

python manage.py shell

>>> MyModel(column1="test",column2="2015").save()
slug is test-2015

However, when I do the migration, this save override method is not called. Here is part of my migration script ..

...
def add_myModel_details(apps, schema_editor):
    x = apps.get_model("myapp","myModel")
    MyModel(column1 = "test", column2="2015" ).save()
.....

The pool is empty because save overrides are not called.

+4
source share
1 answer

This is because migration does not call your method save.

, save - slug. AutoSlugField .

1. :

pre_save.

:

@receiver(pre_save, sender=MyModel)
def my_handler(sender, **kwargs):
    my_model = kwargs.get('instance')
    if my_model.column2:
        my_model.slug = slugify(my_model.column1 + " " + my_model.column2)
    else:
        my_model.slug = slugify(my_model.column1)
    print my_model.slug

2. AutoSlugField:

, . AutoSlugField django-extensions. .

:

slug = AutoSlugField(populate_from=("column1", "column2"))

3. save

save slug, .

django >= 1.7

0

All Articles