【问题标题】:Batch changes to django database slug data批量更改 django 数据库 slug 数据
【发布时间】: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 吗?

【问题讨论】:

  • 我们在这里谈论多少数据(多少对象)?
  • 足够多的对象,我当然不想手动完成。但不是一吨。 10个模型。每个模型可能有 3 打对象
  • 致力于实施 aganders3 的建议。 . .

标签: python database django


【解决方案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() 逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    相关资源
    最近更新 更多