Обновление только этого свойства, а не всей модели, 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
Вернуться на верх