auto_now 字段未通过使用 filter() 进行更新

Anu*_*TBE 3 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)
Run Code Online (Sandbox Code Playgroud)

并使用更新模型数据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
Run Code Online (Sandbox Code Playgroud)

这工作正常并且值已更新。但修改的字段不会更新。创建修改字段中的值保持相同(创建记录时的时间戳)

nev*_*ner 8

文档中描述了这种行为:

\n\n
\n

该字段仅在调用 Model.save() 时自动更新。当以其他方式(例如 QuerySet.update())更新其他字段时,该字段不会更新,尽管您可以在更新中为该字段指定自定义值。

\n
\n

  • 我想知道他们为什么选择这样做......似乎是一个错误而不是一个功能。 (4认同)