代码之家  ›  专栏  ›  技术社区  ›  Adam

对所有对象运行save()

  •  0
  • Adam  · 技术社区  · 6 年前

    今天我将在我的网站上做一个迁移,我添加了新的字段(slug)和slugify method with save()。事情是这样的:

    def save(self, *args, **kwargs):
            self.slug = slugify(self.tag+'-'+self.title)
            super(Image, self).save(*args, **kwargs)
    

    我的模型有大约50个条目,我不想手动保存它们,只是为所有条目生成slug。

    有办法自动完成吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Haren Lewis    6 年前

    只需运行一个简单的迁移命令就可以做到这一点。

    首先,您需要为应用程序生成一个空迁移。

    python manage.py makemigrations—清空您的appname

    生成的迁移文件如下所示:

    # Generated by Django A.B on YYYY-MM-DD HH:MM
    from django.db import migrations
    
    class Migration(migrations.Migration):
    
        dependencies = [
            ('yourappname', '0001_initial'),
        ]
    
        operations = [
        ]
    

    在操作列表中,可以追加原始SQL查询。

    操作=[ migrations.runsql('sql query to alter your slug field'), ]

    例如:

    migrations.RunSQL('ALTER TABLE Customer MODIFY Address char(100);'), 
    

    PS:因为你在这里只有50个条目,你可以跟随丹尼尔的评论。但是,在处理大量行时,我建议使用迁移方法。

    希望有帮助!