批量更改 django 数据库 slug 数据

Posted

技术标签:

【中文标题】批量更改 django 数据库 slug 数据【英文标题】:Batch changes to django database slug data 【发布时间】:2012-02-02 20:51:11 【问题描述】:

我最近在我的 mysql 数据库模型中添加了 slug 字段(我不知道为什么我之前没有想到这样做)。现在我的数据库中有一堆空白的 slug 字段。我包括了一个save definition in each model

class test(models.Model):
    q = models.CharField(max_length=30)
    s = models.SlugField()

    def save(self, *args, **kwargs):
        self.s = slugify(self.q)
        super(test, self).save(*args, **kwargs)

现在我想写一些东西来填充模型中的每条记录。 关于我可以编写什么代码的任何建议,也许可以让它循环遍历我的所有模型/记录并填充 slug?

一个额外的并发症(虽然我不确定我是否很在意这个)。我在每个模型中都有一个字段:

last_modified = models.DateTimeField("Last Modified", auto_now=True)

我宁愿不触发这个,因为记录并没有真正被修改。 我可以在不更新 last_modified 字段的情况下填充 slug 吗?

【问题讨论】:

可能有帮助:***.com/questions/7499767/… 我们在这里谈论多少数据(多少对象)? 足够多的对象,我当然不想手动完成。但不是一吨。 10个模型。每个模型可能有 3 打对象 致力于实施 aganders3 的建议。 . . 【参考方案1】:

好吧,如果它不是很多数据,而且只是一次性的,那就在 shell 中做吧:

$ python manage.py shell
>>> from my_app.models import Test
>>> for obj in Test.objects.all():
>>>     obj.save()

如果您要经常这样做,请写一个 custom management command 这样做。

至于您的auto_now 问题,这就是我停止使用auto_nowauto_now_add 的原因。每次我用过它们,我总是在以后把它们撕掉。事实上,Django 开发人员表示他们认为它们已被弃用,并且将来可能会被删除。我只需在运行命令之前编辑源代码并删除该选项,然后将其重新添加或替换为自定义 save() 逻辑。

【讨论】:

以上是关于批量更改 django 数据库 slug 数据的主要内容,如果未能解决你的问题,请参考以下文章

Django ORM批量操作和foreign key

Django之批量插入数据以及分页

Django 批量更新两个表的数据

[Django高级之批量插入数据分页器组件]

Django 批量插入数据

django 批量导入数据