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