auto_now字段不会随着使用filter()的更新而更新

时间:2018-09-04 06:22:58

标签: django django-models

我正在使用Django 2.0

我有一个类似的模型

class MyModel(models.Model):
    update_new = models.CharField(blank=True, max_length=200)
    modified = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

并使用Model Manager

更新模型数据
class MyModelManager(models.Manager):
    def get_queryset(self):
        return MyModelQueryset(self.model, self._db)

    def update_or_create(self, pk, **save_data):

        record = MyModel.objects.filter(
            pk=pk
        )

        if record.exists():

            # setting field manually for testing
            save_data['update_new'] = 'anuj'

            uc = record.update(**save_data)
            print(uc) # prints 1

            return record.first(), True

        record, created = self.get_queryset().get_or_create(
            pk=pk
            **save_data
        )

        return record, created

这很好,并且值已更新。但是已修改字段未更新。 已创建已修改字段中的值保持不变(创建记录时的时间戳记)

1 个答案:

答案 0 :(得分:2)

docs中描述的这种行为:

  

该字段仅在调用Model.save()时自动更新。的   以其他方式对其他字段进行更新时,该字段未更新   例如QuerySet.update(),尽管您可以为   像这样的更新中的字段。