【发布时间】:2018-12-08 00:14:50
【问题描述】:
我有一个模型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 字段是 name 字段的 slugified 版本。
我已经运行了以下数据迁移:
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 字段都是空的:
我还反转了迁移并重新运行它,在覆盖的 save() 方法中设置跟踪 (import ipdb; ipdb.set_trace()),但它没有导致 Python 进入调试器,确认该方法不是调用。
为什么没有调用被覆盖的save() 方法?我必须在generate_name_slugs 函数中复制代码吗?
【问题讨论】:
-
SessionType在generate_name_slugs但SessionCategory在选择中。 -
但除此之外,您从
apps.get_model获得的类并不是您的模型文件中的类,设计使然。
标签: python django database-migration