仅更新 属性 并非所有模型,django

Update only that property not all model, django

@property
def policy_escape(self):
    if self.date - datetime.date.today:
        self.status = 2
        self.save()

def save(self, *args, **kwargs):
   self.counter = counter + 1

我有这个政策逻辑。对于创建的每个策略,我都想增加一个 属性 nnumber(这不是我的情况)。

我想在保单日期为今天时更改该保单的状态。但是当我更改它时,策略计数器正在增加。

谁能帮我只更新状态而不更新其他属性?

提前致谢

您可以限制 update_fields:

@property
def policy_escape(self):
    if self.date - datetime.date.today:
        self.status = 2
        self.save(update_fields=("status",))

但是,特定的 Python 对象仍将具有已更改的计数器。因此,您必须避免对该对象进行任何其他 save 调用。

您可以改为传递自定义 kwarg:

@property
def policy_escape(self):
    if self.date - datetime.date.today:
        self.status = 2
        self.save(update_counter=False)

def save(self, *args, **kwargs, update_counter=True):
    if update_counter:
        self.counter += 1
    # ...
    super().save(*args, **kwargs):

另一种完全避免调用 save 的方法是使用 Queryset.update 代替:

@property
def policy_escape(self):
    if self.date - datetime.date.today:
        self.__class__.objects.filter(pk=self.pk).update(status=2)
        # self.status = 2  # if the current object should reflect that change