使用Django 1.4,如何在不自动更新修改后的字段的情况下保存TimeStampedModel对象?

时间:2013-04-08 18:01:27

标签: python django django-south

我正在使用Django和South运行Datamigration。我已经使用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()

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

1 个答案:

答案 0 :(得分:0)

您可以将对象更新为仅使用可用于模型查询集的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')