【问题标题】:Using Django 1.4, How can I save TimeStampedModel objects without automatically updating the modified field?使用 Django 1.4,如何在不自动更新修改字段的情况下保存 TimeStampedModel 对象?
【发布时间】:2013-04-08 18:01:27
【问题描述】:

我正在使用 Django 和 South 运行数据迁移。我已经使用 Schemamigration 向我的模型添加了一个新字段,现在我正在为该模型的所有对象填充该字段。

问题是,当我在数据迁移中对我的对象调用 save() 方法时,它会自动更新每个对象上的修改字段,并且所有对象都以相同的修改日期结束。如果可能的话,我希望能够保留数据迁移之前的修改日期。

目前我的数据迁移如下所示:

class Migration(DataMigration):

    def forwards(self, orm):
        for w in orm.Writer.objects.all():
            w.type = 'outside'
            if w.managed_by != None:
                if w.managed_by.writer != None:
                    if w.id == w.managed_by.writer.id:
                        w.type = 'client'
            w.save()

有没有办法只保存类型字段中的值,而不更新修改日期?

【问题讨论】:

    标签: python django django-south


    【解决方案1】:

    您可以使用可用于模型查询集的 update() 方法更新对象以仅更改所需的字段(有关更多详细信息,请参阅https://docs.djangoproject.com/en/1.4/topics/db/queries/#updating-multiple-objects-at-once)。

    虽然文档引用了针对多个对象使用此功能,但您可以通过限制您正在使用的对象的 PK 来过滤更新查询以仅针对单个对象:

    orm.Writer.objects.filter(pk=w.pk).update(type='client')
    

    【讨论】:

      猜你喜欢
      • 2021-08-06
      • 2020-10-27
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 2019-10-21
      相关资源
      最近更新 更多